Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NPM/Node.js如何在本地Node_modules/.bin目录中进行路径解析_Node.js_Npm - Fatal编程技术网

NPM/Node.js如何在本地Node_modules/.bin目录中进行路径解析

NPM/Node.js如何在本地Node_modules/.bin目录中进行路径解析,node.js,npm,Node.js,Npm,我对此困惑了一段时间 我在名为“foo”的NPM模块中有一个可执行文件(cli/exec.js),如下所示: 在package.json中,我们有: "name": "foo", "bin": { "exec-foo": "cli/exec.js" } 安装此模块后,使用npm安装,节点_模块如下所示: --/node_modules ---/.bin exec-foo ---/foo ---/lodash ---/async ---/whatev …是什么让我

我对此困惑了一段时间

我在名为“foo”的NPM模块中有一个可执行文件(cli/exec.js),如下所示:

在package.json中,我们有:

  "name": "foo",
  "bin": {
    "exec-foo": "cli/exec.js"
  }
安装此模块后,使用npm安装,节点_模块如下所示:

--/node_modules
---/.bin
    exec-foo
---/foo
---/lodash
---/async
---/whatev


…是什么让我感到困惑:既然exec-foo.js文件不再位于项目中,而是位于
Node\u modules/.bin
中,Node.js如何使用require函数进行模块/依赖项解析?对此有一个简单的解释吗?

中对NodeJS分辨率有很好的解释

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

在您的例子中,
node\u modules/.bin/exec.js
将是一个符号链接—指向原始文件的指针

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


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

是的,关键在于./node\u modules/.bin/*中的文件是指向./node\u modules中文件的符号链接/*
--/node_modules
---/.bin
    exec-foo
---/foo
---/lodash
---/async
---/whatev