未捕获错误:模块未自注册

Uncaught Error: Module did not self-register

本文关键字:注册 模块 错误      更新时间:2023-10-04

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

未捕获错误:模块未自注册。",源:/home/alexi/Bureau/dev/jukebox/nod_module/vlc/nod_module/fi/node_modules/bindings/bindings.js(84)

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

如果您已经升级了节点,那么npm rebuild可能会为您修复此问题。

对我来说:则rm -r node_modulesnpm install

我在另一个产品中遇到了类似的问题,我的解决方案是更改我使用的节点的版本。我使用的是0.12.0,然后改回0.10.26

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

nvm use 0.10.26

或者将默认版本设置为0.10.26

nvm alias default 0.10.26

希望这能帮助你——我们的问题来自不同的产品,但解决方案可能是相同的。

我也遇到过类似的问题。

/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);

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

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

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

我的项目包含几个*.cc文件。但是,NODE_MODULE()宏仅在导入其余文件的一个文件上调用。但node期望在源中列出的first*.cc文件上调用它。因此,我不得不更改源代码,将该文件显式添加到开始的中

我添加了相同的问题,因为我作为sudo安装到模块中。。。删除节点模块文件夹并像普通用户一样重新安装修复了它。

对我来说,npm rebuildnpm update不起作用。我不得不删除node_modules文件夹并运行npm install来重新安装它们。

对我来说,运行npm update工作

我得到了一个内部错误:Module did not self-register

  1. 已删除node_modules文件夹
  2. 运行npm install

它运行得很好。

我在Snappy中遇到了这个错误。正在使用节点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。通过运行应用程序测试pm2是否是问题所在无pm2 node server.js然后用pm2:CCD_ 15。

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

重建C++插件

你遇到这样的事情了吗?

Module did not self-register: '…'node_modules'@u4'opencv4nodejs'build'Release'opencv4nodejs.node

很可能您刚刚更新了Node.js。更新Node.js后,您需要重新构建C++插件,即用C++编写的Node.js包。

为什么

当你构建Node.js的C++插件时,它们会被编译成可require.node文件,并链接到当前安装的Node.js ABI库,该库与其他版本不兼容。你的包只与特定版本的Node.js兼容。

如何

首先,尝试npm rebuild。如果基于C++插件的程序包的package.json中有一个build脚本,那就可以了。如果没有,你需要手动构建C++本机插件程序包。再次执行安装此类软件包时所做的操作。请参阅软件包文档中的构建说明进行重建。或者尝试重新安装(npm install)。

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

我也遇到了同样的问题。引用全局引用脚本的脚本引用无效。我去掉了那个无效的引用,错误就消失了。我的错误消息没有指示那个特定的无效引用,这使得调试更加困难。但"未捕获错误:模块未自我注册"是我收到的消息。

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

我在设置Cypress项目时遇到了这个问题。

我发现这个问题是因为Cypress默认使用捆绑包版本中的node(在我的情况下是8.0版本),而我想要使用的包要求node版本为10或更高。

我的机器上确实安装了node12.0,但由于cyprus没有使用,我不得不在设置文件(cypry.json)中添加如下所示的行,将"nodeVersion"的值设置为"system",明确告诉cyprus使用我机器上安装的节点版本。

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

**"nodeVersion": "system"**

其他答案中未提及:

许多具有本机加载项的npm模块都不具有上下文感知功能,如果您在不同上下文中(例如worker_threads、electron或任何其他具有独立上下文的env,这些上下文都有自己的require缓存)多次加载模块的环境中工作,则这是一个问题。

在这些情况下,你不能在项目中修复它,它必须在模块本身中解决。

对于许多模块来说,修复似乎很小:https://github.com/nodejs/node/issues/21783#issuecomment-429637117

尽管对其他人来说,它可以更多地参与进来。更多信息请点击此处:https://github.com/nodejs/node/blob/main/doc/api/addons.md#context-感知插件