You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js N-API模块报错:Module did not self-register 求助

解决Node.js N-API模块"Module did not self-register"报错

我之前也碰到过这个报错,结合你的代码和报错栈来看,主要问题出在N-API初始化函数的签名上,再给你几个其他可能的排查方向:

1. 修正初始化函数的签名(最关键)

你的Init函数签名不符合N-API的要求,NAPI_MODULE宏期望的初始化函数只需要接收napi_env和napi_value exports两个参数,并且要返回处理后的exports对象。

你当前的代码里,Init函数是void类型还多了两个参数,这会导致模块无法正确注册到Node环境中。把它改成这样:

#include <node_api.h>

napi_value HelloMethod(napi_env env, napi_callback_info info) {
  napi_value world;
  napi_create_string_utf8(env, "world", 5, &world);
  return world;
}

napi_value Init(napi_env env, napi_value exports) {
  napi_property_descriptor desc = { 
    "hello", 
    NULL, 
    HelloMethod, 
    NULL, 
    NULL, 
    NULL, 
    napi_default, 
    NULL 
  };
  napi_define_properties(env, exports, 1, &desc);
  return exports; // 必须返回exports对象
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

2. 彻底清理后重新编译

改完代码后,一定要清理旧的编译产物再重新编译,避免残留的旧文件导致问题:

# 清理旧编译文件
node-gyp clean
# 重新配置并编译
node-gyp configure build

3. 检查Node.js版本一致性

如果编译模块时用的Node版本和你运行时的版本不一样,也可能出现这个报错。你可以用下面的命令确认版本:

# 查看当前运行的Node版本
node -v
# 查看node-gyp关联的Node版本
node-gyp -v

如果版本不一致,切换到相同版本后再重新编译。

4. 确认系统架构匹配

还要确保你的Node.js和编译环境的架构一致(都是64位或者都是32位):

# 查看Node的架构
node -p process.arch
# 查看系统架构(Linux/macOS)
uname -m
# Windows下可以用这个命令
systeminfo | findstr "System Type"

如果架构不匹配,安装对应架构的Node后重新编译即可。

最后验证一下:编译完成后,在Node里运行这段代码,应该能正常输出"world":

const addon = require('./build/Release/addon');
console.log(addon.hello());

内容的提问来源于stack exchange,提问作者bingxl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:21:18