107

我尝试将 node-vlc 与 nw.js (v0.12.0-alpha2) 一起使用。当我在没有 nw.js 的情况下启动我的应用程序时,它可以工作,但是当我使用 nw.js 启动它时出现错误:

未捕获的错误:模块没有自行注册。”,来源:/home/alexis/Bureau/dev/jukebox/node_modules/vlc/node_modules/ffi/node_modules/bindings/bindings.js (84)

我用 nw-gyp 尝试了一些命令,但对我没有帮助。我在 Ubuntu 14、64 位。

4

13 回答 13

176

如果您已升级节点,则npm rebuild可能会为您解决此问题

于 2015-03-04T16:29:06.057 回答
60

对我来说: rm -r node_modules那么 npm install

于 2015-07-01T12:20:44.240 回答
23

我在另一个产品上遇到了类似的问题,我的解决方法是更改​​我正在使用的节点版本。我正在使用0.12.0并更改回0.10.26.

就个人而言,我使用NVM来处理节点版本更改。安装 NVM 就像运行一样简单

nvm use 0.10.26

或者将默认版本设置为 0.10.26

nvm alias default 0.10.26

希望这对您有所帮助 - 我们的问题来自不同的产品,但解决方案可能是相同的。

于 2015-02-17T23:06:14.747 回答
11

我有类似的问题。

/Users/user/NodeAddons/bridge/node_modules/bindings/bindings.js:83 错误:模块没有自注册。

就我而言,我正在做一个 C/C++ 插件,我忘记导出插件,在我的 main.cc 中缺少以下代码:

void Init(v8::Handle<v8::Object> exports) {
  NODE_SET_METHOD(exports, "method", method);
}

NODE_MODULE(method, Init);

希望这对其他人有帮助!谢谢 :)

于 2016-12-22T13:03:18.570 回答
3

我添加了相同的问题,因为我以 sudo 的身份安装到模块...删除节点模块文件夹并以普通用户身份重新安装已修复它。

于 2015-05-14T09:17:19.970 回答
3

在创建多文件 c++ 插件时,我曾经遇到过这个问题。在我的 binding.gyp 文件中,我有:

"sources": ["src/*.cc", "src/*.h" ]

我的项目包含几个 *.cc 文件。但是,NODE_MODULE() 宏仅在一个文件上调用,该文件导入了其余文件。但是节点希望它在源中列出的第一个 *.cc 文件上被调用。所以我不得不更改源以将该文件显式添加到开头

于 2017-10-25T15:09:10.390 回答
2

对我来说,跑步npm update有效

于 2015-03-23T16:28:22.970 回答
2

对我来说npm rebuild还是npm update没用。我不得不删除该node_modules文件夹并运行npm install以再次安装它们。

于 2015-05-22T16:10:59.947 回答
1

我在 0.12 和 io.js 1.3.0 上遇到了同样的问题,恢复到 Node.js 0.10 解决了这个问题。

于 2015-02-24T12:30:57.353 回答
1

我收到一个内部错误:Module did not self-register.

  1. 删除了node_modules文件夹
  2. 跑了npm install

它工作得很好。

于 2021-07-13T11:10:57.747 回答
1

我在使用 Snappy 时遇到了这个错误。正在使用 Node 11。检查了 Snappy 的 NPM 页面https://www.npmjs.com/package/snappy,他们在其中列出了他们支持的节点版本。

删除 node_modules 文件夹rm -rf node_modules,然后使用正确版本的 Node 重新安装解决了它。

在撰写本文时,他们在 Linux 上支持的版本之一是 Node 版本 12。

nvm deactivate 11
nvm uninstall 11
nvm install 12
nvm use 12

问题解决了


此问题的另一个原因:如果您使用的是 pm2,那么在升级节点后,您可能需要重新安装 pm2。node server.js 通过在没有 pm2然后使用 pm2:运行您的应用程序来测试 pm2 是否是问题pm2 start server.js

更新 Node.js 后更新 PM2 的正确方法

于 2021-11-11T16:00:35.253 回答
0

我在设置赛普拉斯项目时遇到了这个问题。

我发现这个问题是因为赛普拉斯默认使用其捆绑版本中的节点(在我的情况下是 8.0 版),而我想使用的包需要节点版本为 10 或更高版本。

我确实在我的机器上安装了节点 12.0,但由于没有使用 cypress,我必须在设置文件 (cypress.json) 中添加下面显示的行,以将“nodeVersion”的值设置为“system”,以明确告诉 cypress使用我机器上安装的节点版本。

将此行添加到您的设置文件中:

**"nodeVersion": "system"**
于 2021-09-01T10:02:42.520 回答
0

我有同样的问题。我的引用全局引用脚本的脚本有一个无效的引用。我取消了那个无效的引用,错误就消失了。我的错误消息没有表明特定的无效引用,这使得调试变得更加困难。但是“未捕获的错误:模块没有自行注册”是我收到的消息。

这也发生在我的另一个项目中。出于某种原因,如果其中一个字符是大写的,它将无法识别参考路径。甚至认为,大写字母是路径的正确拼写。

于 2018-03-11T19:47:28.247 回答