簡體   English   中英

NPM / Node.js如何在本地node_modules / .bin目錄中執行路徑解析

[英]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 為此有一個簡單的解釋嗎?

文檔 NodeJS的解析進行了很好的解釋。

如果傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM