欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node?文件查找優(yōu)先級及?Require?方法文件查找策略

 更新時間:2022年09月25日 08:36:37   作者:別救了這猴子廢了???????  
這篇文章主要介紹了Node文件查找優(yōu)先級及Require方法文件查找策略。文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

一、模塊規(guī)范

NodeJSCommonJS進行了支持和實現,讓我們在開發(fā)node的過程中可以方便的進行模塊化開發(fā):

  • 在Node中每一個js文件都是一個單獨的模塊
  • 模塊中包括CommonJS規(guī)范的核心變量:exports、module.exports、require
  • 通過上述變量進行模塊化開發(fā)

而模塊化的核心是導出與導入,在Node中通過exportsmodule.exports負責對模塊中的內容進行導出,通過require函數導入其他模塊(自定義模塊、系統(tǒng)模塊、第三方庫模塊)中的內容

二、查找策略

require方法接收一下幾種參數的傳遞:

  • 原生模塊:http、fs、path等
  • 相對路徑的文件模塊:./mod或../mod
  • 絕對路徑的文件模塊:/pathtomodule/mod
  • 目錄作為模塊:./dirname
  • 非原生模塊的文件模塊:mod

require參數較為簡單,但是內部的加載卻是十分復雜的,其加載優(yōu)先級也各自不同,如下圖:

從上圖可以看見,文件模塊存在緩存區(qū),尋找模塊路徑的時候都會優(yōu)先從緩存中加載已經存在的模塊

原生模塊

而像原生模塊這些,通過require方法在解析文件名之后,優(yōu)先檢查模塊是否在原生模塊列表中,如果在則從原生模塊中加載

絕對路徑、相對路徑

如果require絕對路徑的文件,則直接查找對應的路徑,速度最快

相對路徑的模塊則相對于當前調用require的文件去查找

如果按確切的文件名沒有找到模塊,則 NodeJs 會嘗試帶上 .js.json或 .node拓展名再加載

目錄作為模塊

默認情況是根據根目錄中package.json文件的main來指定目錄模塊,如:

{ "name" : "some-library",
  "main" : "main.js" }

如果這是在./some-library node_modules目錄中,則 require('./some-library') 會試圖加載 ./some-library/main.js

如果目錄里沒有 package.json文件,或者 main入口不存在或無法解析,則會試圖加載目錄下的 index.js 或 index.node 文件

非原生模塊

在每個文件中都存在module.paths,表示模塊的搜索路徑,require就是根據其來尋找文件

window輸出如下:

[ 'c:\nodejs\node_modules','c:\node_modules' ]

可以看出module path的生成規(guī)則為:從當前文件目錄開始查找node_modules目錄;然后依次進入父目錄,查找父目錄下的node_modules目錄,依次迭代,直到根目錄下的node_modules目錄

當都找不到的時候,則會從系統(tǒng)NODE_PATH環(huán)境變量查找

舉個例子

如果在/home/ry/projects/foo.js文件里調用了 require('bar.js'),則 Node.js 會按以下順序查找:

  • /home/ry/projects/node_modules/bar.js
  • /home/ry/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

這使得程序本地化它們的依賴,避免它們產生沖突

三、總結

通過上面模塊的文件查找策略之后,總結下文件查找的優(yōu)先級:

  • 緩存的模塊優(yōu)先級最高
  • 如果是內置模塊,則直接返回,優(yōu)先級僅次緩存的模塊
  • 如果是絕對路徑 / 開頭,則從根目錄找
  • 如果是相對路徑 ./開頭,則從當前require文件相對位置找
  • 如果文件沒有攜帶后綴,先從js、json、node按順序查找
  • 如果是目錄,則根據 package.json的main屬性值決定目錄下入口文件,默認情況為 index.js
  • 如果文件為第三方模塊,則會引入 node_modules 文件,如果不在當前倉庫文件中,則自動從上級遞歸查找,直到根目錄

到此這篇關于Node 文件查找優(yōu)先級及 Require 方法文件查找策略的文章就介紹到這了,更多相關Node 文件查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

  • Node.js異步I/O學習筆記

    Node.js異步I/O學習筆記

    這篇文章主要介紹了Node.js異步I/O學習筆記,本文詳細講解了異步I/O的基本概念、Node的異步I/O、非I/O的異步API、事件驅動與高性能服務器等內容,需要的朋友可以參考下
    2014-11-11
  • nodejs安裝與配置過程+初學實例解讀

    nodejs安裝與配置過程+初學實例解讀

    這篇文章主要介紹了nodejs安裝與配置過程+初學實例解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Express框架搭建項目的實現步驟

    Express框架搭建項目的實現步驟

    Express是一個基于Node.js平臺的輕量級Web應用框架,它提供了簡潔的API和豐富的功能,本文主要介紹了Express框架搭建項目的實現步驟,感興趣的可以了解一下
    2024-06-06
  • node通過npm寫一個cli命令行工具

    node通過npm寫一個cli命令行工具

    本篇文章主要介紹了node通過npm寫一個cli命令行工具 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    nvm報錯Now?using?node?v版本號(64-bit)圖文解決方法

    這篇文章主要給大家介紹了關于nvm報錯Now?using?node?v版本號(64-bit)的解決方法,文中將解決的辦法介紹的非常詳細,對遇到這個問題的朋友具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • nodejs下打包模塊archiver詳解

    nodejs下打包模塊archiver詳解

    這篇文章主要介紹了nodejs下打包模塊archiver的使用方法,非常簡單實用,這里推薦給有需要的小伙伴。
    2014-12-12
  • node.js +mongdb實現登錄功能

    node.js +mongdb實現登錄功能

    這篇文章主要介紹了node.js +mongdb實現登錄功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 詳解Node.js如何開發(fā)命令行工具

    詳解Node.js如何開發(fā)命令行工具

    追求更高的效率是碼農不斷的追求。選擇合適的工具,合理搭配使用,既能提高一部分開發(fā)效率,又能改善寫代碼時的心情。使用Node.js開發(fā)命令行工具是開發(fā)者應該掌握的一項技能,適當編寫命令行工具以提高開發(fā)效率。
    2016-08-08
  • Node.js卸載與重裝及zip與msi安裝詳解

    Node.js卸載與重裝及zip與msi安裝詳解

    Node.js是一個JavaScript運行環(huán)境,可以使JavaScript這類腳本語言編寫出來的代碼運行速度獲得極大提升,下面這篇文章主要給大家介紹了關于Node.js卸載與重裝及zip與msi安裝的相關資料,需要的朋友可以參考下
    2023-01-01
  • 最新評論