![](/img/trans.png)
[英]node.js / npm - override local default modules directory (node_modules)
[英]How does NPM/Node.js do path resolution in the local node_modules/.bin directory
對此感到困惑了一段時間
我在名為“ foo”的NPM模塊中有一個可執行文件(cli / exec.js),如下所示:
/foo
--/cli
exec.js
--/lib
package.json
在package.json中,我們有:
"name": "foo",
"bin": {
"exec-foo": "cli/exec.js"
}
安裝此模塊后,通過npm install,node_modules如下所示:
--/node_modules
---/.bin
exec-foo
---/foo
---/lodash
---/async
---/whatev
......
...讓我感到困惑的是:Node.js如何通過require函數執行模塊/依賴關系解析,現在exec-foo.js文件不再位於項目中,而是現在位於在node_modules/.bin
? 為此有一個簡單的解釋嗎?
如果傳遞給require()的模塊標識符不是本機模塊,並且不是以'/'、'../'或'./'開頭,則Node.js從當前模塊的父目錄開始,並添加/ node_modules,然后嘗試從該位置加載模塊。 節點不會將node_modules附加到已經以node_modules結尾的路徑。
在您的情況下, node_modules/.bin/exec.js
將是符號鏈接-指向原始文件的指針。
然后,NodeJS檢查原始文件路徑,並開始解析所需的模塊。 如果在當前的node_modules
找不到該路徑,則向上查找1個目錄,直到找到您的庫。
如果未找到庫,則會引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.