一般,在Node.js裏導入是經過 require函數調用進行的。
Node.js會根據 require的是相對路徑仍是非相對路徑作出不一樣的行爲。node
相對路徑很簡單。 例如,假設有一個文件路徑爲 /root/src/moduleA.js,包含了一個導入json
var x = require("./moduleB");
Node.js如下面的順序解析這個導入:函數
非相對模塊名的解析是個徹底不一樣的過程。
Node會在一個特殊的文件夾 node_modules裏查找你的模塊。
node_modules可能與當前文件在同一級目錄下,或者在上層目錄裏。
Node會向上級目錄遍歷,查找每一個 node_modules直到它找到要加載的模塊。
假設/root/src/moduleA.js裏使用的是非相對路徑導入:ui
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)會向上跳一級目錄。code