当其他模块需要时,节点如何parsing模块位置?

我有以下目录和文件

/path/to/dir1 /path/to/dir1/server.js /path/to/dir1/package.json /path/to/dir1/node_modules /path/to/dir2/moduleA.js 

然后我有这样开始的moduleA.js:

 var React = require('react'); 

我的package.json文件如下所示:

 { "dependencies": { "react": "^0.10.0" } } 

现在从server.js中,如果我这样做:

要求( '../ DIR2 / moduleA')

它会findmoduleA,但是然后在moduleA中,我要求('react')实际驻留在node_modules文件夹的server.js的同一个目录中。 但是这个位置没有被search,我得到一个错误

错误:无法find模块“反应”

我想在parsingrequire语句时search的位置之一是当前正在执行的进程的node_modules目录? 为什么这不起作用?

从文档 :

node_module加载文件夹

如果传递给require()的模块标识符不是本地模块,并且不以'../''./'开头,则节点从当前模块的父目录开始,并添加/node_modules ,并尝试从该位置加载模块。

如果在那里没有find,则移到父目录,依此类推,直到到达树的根。

例如,如果'/home/ry/projects/foo.js'的文件调用了require('bar.js') ,那么节点将按以下顺序查找以下位置:

 /home/ry/projects/node_modules/bar.js /home/ry/node_modules/bar.js /home/node_modules/bar.js /node_modules/bar.js 

这允许程序本地化他们的依赖关系,所以他们不会发生冲突。

也就是说,它会在/path/to/dir2/node_modules/path/to/node_modules等中/path/to/node_modules ,但不在/path/to/dir1/node_modules

我想在parsingrequire语句时search的位置之一是当前正在执行的进程的node_modules目录?

没有; requiresearch同一目录中的node_modules ,作为包含运行require的文件及其所有父node_modules 。 所以在/path/to/dir2/moduleA.jssearch中require

  • /path/to/dir2/node_modules/
  • /path/to/node_modules/
  • /path/node_modules/
  • /node_modules/

正确的做法是,在/path/to/dir2 ,假设dir2是一个完整的模块:

 sudo npm link 

然后回到dir1

 npm link dir2 

并为每一个正确指定你的依赖关系。