NPM / Node.js如何在本地node_modules / .bin目录

时间:2016-11-23 22:29:08

标签: node.js npm

暂时对此感到困惑

我在一个名为“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?对此有一个简单的解释吗?

1 个答案:

答案 0 :(得分:2)

the documentation中很好地解释了NodeJS分辨率。

  

如果传递给require()的模块标识符不是本机模块,并且不以'/','.. /'或'./'开头,那么Node.js从该目录的父目录开始当前模块,并添加/ node_modules,并尝试从该位置加载模块。 Node不会将node_modules附加到已经以node_modules结尾的路径。

在您的情况下,node_modules/.bin/exec.js将是一个符号链接 - 指向原始文件的指针。

然后NodeJS检查原始文件路径并开始解析所需的模块。如果在当前node_modules路径中找不到,则向上移动1个目录,直到找到您的库。

如果没有找到库,则会抛出错误。