nodejs的require是如何執行的


通常,在Node.js里導入是通過 require函數調用進行的。
Node.js會根據 require的是相對路徑還是非相對路徑做出不同的行為。

相對路徑

相對路徑很簡單。 例如,假設有一個文件路徑為 /root/src/moduleA.js,包含了一個導入

var x = require("./moduleB"); 

Node.js以下面的順序解析這個導入:

  1. 檢查/root/src/moduleB.js文件是否存在。
  2. 檢查/root/src/moduleB目錄是否包含一個package.json文件,且package.json文件指定了一個"main"模塊。 在我們的例子里,如果Node.js發現文件 /root/src/moduleB/package.json包含了{ "main": "lib/mainModule.js" },那么Node.js會引用/root/src/moduleB/lib/mainModule.js。
  3. 檢查/root/src/moduleB目錄是否包含一個index.js文件。 這個文件會被隱式地當作那個文件夾下的"main"模塊。

非相對路徑

非相對模塊名的解析是個完全不同的過程。
Node會在一個特殊的文件夾 node_modules里查找你的模塊。
node_modules可能與當前文件在同一級目錄下,或者在上層目錄里。
Node會向上級目錄遍歷,查找每個 node_modules直到它找到要加載的模塊。
假設/root/src/moduleA.js里使用的是非相對路徑導入:

var x = require("moduleB");

Node則會以下面的順序去解析 moduleB,直到有一個匹配上。

/root/src/node_modules/moduleB.js
/root/src/node_modules/moduleB/package.json (如果指定了"main"屬性)
/root/src/node_modules/moduleB/index.js 

/root/node_modules/moduleB.js
/root/node_modules/moduleB/package.json (如果指定了"main"屬性)
/root/node_modules/moduleB/index.js 

/node_modules/moduleB.js
/node_modules/moduleB/package.json (如果指定了"main"屬性)
/node_modules/moduleB/index.js
注意Node.js在步驟(4)和(7)會向上跳一級目錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM