未捕获错误: 模块没有自我注册

我尝试在 nw.js (v0.12.0-alpha2)中使用 node-vlc。当我不使用 nw.js 启动我的应用程序时,它能正常工作,但是当我使用 nw.js 启动它时,我得到了一个错误:

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

我尝试了一些命令,但它不能帮助我。 I am on Ubuntu 14, 64-bit.

106797 次浏览

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

就个人而言,我使用 NVM来处理节点版本的更改

nvm use 0.10.26

Or setting the default version to 0.10.26

nvm alias default 0.10.26

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

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

如果您已经升级了节点,那么 npm rebuild可能会为您解决这个问题

对我来说,运行 npm update很有效

我添加了同样的问题,因为我将 sudo 安装到模块中..。 Removing the node modules folder and reinstalling as normal user fixed it.

对我来说,npm rebuildnpm update都不起作用。我必须删除 node_modules文件夹并运行 npm install再次安装它们。

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

我也有过类似的问题。

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

In my case I was doing a C/C++ Add-on, and I had forgotten to export the add-on, in my main.cc was missing the code below:

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


NODE_MODULE(method, Init);

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

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

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

我的项目包含几个 * 。抄送文件。但是,NODE _ MODULE ()宏仅对导入其余文件的一个文件进行调用。但是 node 期望在 第一 * 上调用它。源代码中列出的 cc 文件。因此,我必须更改源代码,以显式地将该文件添加到开头

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

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

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

  1. 删除 Node _ module文件夹
  2. 运行 npm install

效果很好。

我在建立我的 Cypress 项目时遇到了这个问题。

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

I did have node 12.0 installed on my machine but since cypress was not using that I had to add the line shown below in the settings file (cypress.json) to set the value for 'nodeVersion' to 'system', to tell cypress explicitly to use the node version installed on my machine.

将这一行添加到设置文件:

**"nodeVersion": "system"**

我和 Snappy 之间出了点问题。正在使用 Node 11。检查了 Snappy 的 NPM 页面 https://www.npmjs.com/package/snappy,其中列出了他们支持的节点版本。

Deleting node_modules folder rm -rf node_modules and then reinstalling using the correct version of Node resolved it.

One of the versions they supported on Linux at the time of this writing was Node version 12.

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

问题解决了


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

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

重新构建你的 C + + 插件。

你遇到过这样的事吗?

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

It’s likely that you have just updated your Node.js. 更新了 Node.js 之后,需要重新构建 < a href = “ https://nodejs.org/api/addons.html”rel = “ nofollow noReferrer”> C + + add-ons , Node.js packages written in C++.

为什么

当构建 Node.js 的 C + + 附加组件时,它们被编译成能够 require.node文件并链接到 currently installed Node.js ABI 库,这与其他版本的 currently installed Node.js ABI 库不兼容。您的包只与特定版本的 Node.js 兼容。

怎么做到的

首先,试试 npm rebuild。如果您的基于 C + +-add-on 的包有一个 build脚本,那么就可以了。如果没有,那么您需要手动构建您的 C + + 本机附加组件包。再次执行安装此类软件包时所做的操作。请参考包文档中的构建说明来重新构建它们。或者尝试重新安装它们(npm install)。