未捕获错误:模块未自注册
Uncaught Error: Module did not self-register
我尝试将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_modules
npm 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 rebuild
或npm update
不起作用。我不得不删除node_modules
文件夹并运行npm install
来重新安装它们。
对我来说,运行npm update
工作
我得到了一个内部错误:Module did not self-register
。
- 已删除node_modules文件夹
- 运行
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-感知插件
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 未捕获错误:模块未自注册
- 错误:模块未自行注册
- 我可以得到所有注册模块的列表在我的Gruntfile.js
- 从typescript模块中注册Knockout.js组件视图模型
- 注入器已创建.无法注册模块
- 绑定错误.模块没有自我注册
- 如果我在两个模块中注册两个具有相同名称的不同指令,最后一个注册会获胜吗?
- 注册多个模块