自定義模塊指的是非核心模塊,也不是路徑形式的標識符。它是一種特殊的文件模塊,可能是一個文件或者包的形式。這類模塊的查找是最費時的,也是所有方式中最慢的一種。
模塊路徑是Node在定位文件模塊的具體文件時制定的查找策略,具體表現為一個路徑組成的數組。關於這個路徑的生成規則,我們可以手動嘗試一番。
創建test.js文件,其內容為 console.log(module.paths); 。
將其放到任意一個目錄中然后執行 node test.js 。
在Linux下,你可能得到的是這樣一個數組輸出:
[ '/home/jackson/research/node_modules',
'/home/jackson/node_modules',
'/home/node_modules',
'/node_modules' ]
1
2
3
4
而在Windows下,也許是這樣:
[ 'c:\\nodejs\\node_modules', 'c:\\node_modules' ]
1
可以看出,模塊路徑的生成規則如下所示。
前文件目錄下的node_modules目錄。
父目錄下的node_modules目錄。
父目錄的父目錄下的node_modules目錄。
沿路徑向上逐級遞歸,直到根目錄下的node_modules目錄。
它的生成方式與JavaScript的原型鏈或作用域鏈的查找方式十分類似。在加載的過程中,Node會逐個嘗試模塊路徑中的路徑,直到找到目標文件為止。可以看出,當前文件的路徑越深,模塊查找耗時會越多,這是自定義模塊的加載速度是最慢的原因。
webpack可以配置模塊的查找路徑
resolve: {
modules: [path.resolve(__dirname, 'node_modules')]
}
1
2
3
指定只在當前模塊的node_modules查找模塊
---------------------