认真调试node.js'无法找到模块xyz / abcd'

时间:2014-01-11 00:07:06

标签: node.js module require

我有Error: Cannot find module xyz/abcd错误。

是,已安装所需的模块。

根据module.require here的伪代码,应该工作。

我试图在require()内潜水,以了解为什么找不到我的档案。我的节点调试器不会进入require()。我已经尝试了strace / grep NOENT技术,但没有成功。

知道如何解决令人讨厌的require()失败吗?

注意:以防万一:错误来自需要xyz / b的文件node_modules / xyz / a。它应该按照文档工作。

1 个答案:

答案 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到当前工作目录的父目录!我发现我的应用程序的父文件夹中的模块有时会被选中!