当其他模块需要时,节点如何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目录?
没有; require
search同一目录中的node_modules
,作为包含运行require
的文件及其所有父node_modules
。 所以在/path/to/dir2/moduleA.js
search中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
并为每一个正确指定你的依赖关系。