其它的如透過NPM安裝的第三方模組(third-party modules)或本地模組(local modules),每個模組都會暴露一個公開的API。以便開發者可以導入。如
這裡列下node模組的載入及快取機制
1)載入內建模組(A Core Module)
2)載入檔案模組(A File Module)
3)載入檔案目錄模組(A Folder Module)
4)載入node_modules裡的模組
5)自動快取已載入模組
Node的內建模組被編譯為二進位形式,引用時直接使用名字而非檔案路徑。當第三方的模組和內建模組同名時,內建模組將覆蓋第三方同名模組。因此命名時需要注意不要和內建模組同名。如取得一個http模組
二、載入檔案模組
絕對路徑的
程式碼如下:
注意,這裡忽略了副檔名“.js”,以下是對等的
三、載入檔案目錄模組
此時,Node將搜尋整個folder目錄,Node會假設folder為一個套件並試圖找到套件定義檔package.json。如果folder目錄裡沒有包含package.json文件,Node會假設預設主文件為index.js,也就是載入index.js。如果index.js也不存在,那麼載入將會失敗。
假如目錄結構如下
package.json定義如下
"main": "modA.js"
}此時 require('./folder') 將傳回模組modA.js。如果package.json不存在,那麼將會傳回模組index.js。如果index.js也不存在,那麼將會發生載入異常。
四、載入node_modules裡的模組
如果模組名稱不是路徑,也不是內建模組,Node會試圖去目前目錄的node_modules資料夾裡搜尋。如果目前目錄的node_modules裡沒有找到,Node會從父目錄的node_modules裡搜索,這樣遞歸下去直到根目錄。
不必擔心,npm指令可讓我們很方便的去安裝,卸載,更新node_modules目錄。
五、自動快取已載入模組
init.js
命令列執行:
node init.js
輸入如下
可以看到雖然require了兩次,但modA.js還是只執行了一次。 mod1和mod2是相同的,即兩個引用都指向了同一個模組物件。