【问题标题】:Seriously debugging node.js 'Cannot find module xyz/abcd'认真调试 node.js '找不到模块 xyz/abcd'
【发布时间】:2014-01-30 03:50:23
【问题描述】:

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

是的,所需的模块已安装。

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

我试图深入require() 以了解它为什么找不到我的文件。我的节点调试器不会进入 require()。我也尝试了strace / grep NOENT 技术,但也没有成功。

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

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

【问题讨论】:

  • 这是您自己的模块吗?你是怎么安装的?
  • @nhaa 我不想深入细节,因为它很复杂,但它是我自己的模块 A,它是另一个自己的模块 B 的依赖项。npm ls 将其总结为 [root] - > B(无关)-> A(npm 链接)。 A 内部有 3 个文件 x、y 和 z,而 A/x 需要 A/y 和 A/z。 A 在 A 单元测试中独立工作,但在 B 单元测试中 B 的依赖项时不能。无论如何它应该根据需要的伪代码工作。
  • 我看到 node.js 代码中有 debug(...) 调用。有人知道如何激活它们吗?
  • $ NODE_DEBUG=relevant_module_name node index.js
  • 从 node v0.10 升级到版本 0.12.2 后我遇到了这个问题,我意识到我基本上卸载了所有 node 包。

标签: node.js module require


【解决方案1】:

通过更多调查,我认为我找到了一个很好的技术:

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 到当前工作目录的父目录!我从我的应用程序的父文件夹中找到了有时选择的模块!

【讨论】:

  • 我希望这是第一个结果!我遇到了这个问题,所有其他“调试”问题都只是 npm install 答案。你的实际上展示了如何调试!您在大约 90 秒内解决了我的问题。
  • 导出是节点命令还是命令行开关?我把这段代码放在哪里。
  • @Ernesto "export" 是一个 bash 命令。第一个块应该是您输入命令的 bash 终端。 ss64.com/bash/export.html
猜你喜欢
  • 2014-03-11
  • 2019-05-24
  • 2014-04-17
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多