我有Error: Cannot find module xyz/abcd
错误。
是,已安装所需的模块。
根据module.require here的伪代码,应该工作。
我试图在require()
内潜水,以了解为什么找不到我的档案。我的节点调试器不会进入require()。我已经尝试了strace / grep NOENT
技术,但没有成功。
知道如何解决令人讨厌的require()
失败吗?
注意:以防万一:错误来自需要xyz / b的文件node_modules / xyz / a。它应该按照文档工作。
答案 0 :(得分:15)
通过调查更多,我认为我找到了一个很好的技术:
export NODE_DEBUG=module
node my_script.js
给出了如此有趣的痕迹:
looking for "/(...)/tests_init.js" in ["/home/(me)/.nave/installed/0.10.24/lib/node","/home/(me)/.node_modules","/home/(me)/.node_libraries","/home/(me)/.nave/installed/0.10.24/lib/node"]
顺便说一下,它显示节点根本没有搜索我认为的地方。是时候调查......
[编辑]故事的结尾:
1)似乎节点没有对使用npm link
安装的模块进行处理。 require(...)
有时无法从npm链接模块中选择文件。我不想进一步调查确切的错误条件,我只是得出结论npm link
非常脆弱。
2)注意节点一直在寻找node_modules到当前工作目录的父目录!我发现我的应用程序的父文件夹中的模块有时会被选中!