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

如何在ES模块(.mjs文件)中加载Native Node Addons?

在ES模块(.mjs)中加载Node.js原生模块的解决方案

可行方案:使用createRequire桥接CommonJS加载逻辑

这是最直接且官方支持的方法,在ES模块中创建CommonJS风格的require函数,以此加载.node原生模块:

import { createRequire } from 'module';
// 基于当前模块的URL创建require函数
const require = createRequire(import.meta.url);

// 像CommonJS中一样加载原生模块
const mod = require('./addon');
console.log(mod.add(1, 2)); // 输出3

为什么之前的尝试失败?

  • 方法1/4报错:ES模块的解析规则不会自动查找.node后缀的文件,必须通过CommonJS的require来处理这类特殊后缀。
  • 方法2报错:Node.js没有内置针对.node扩展名的ES模块加载器,直接导入会触发未知扩展名错误。
  • 方法3报错:import()是异步操作,返回的是Promise对象,直接调用mod.add相当于在Promise实例上调用方法,自然会报错。

其他可选方案(不推荐,复杂度高)

如果一定要用ES模块的导入语法,可以自定义模块加载器,但需要编写额外的加载逻辑并通过--experimental-loader参数启动Node.js,这种方式仅适合特殊场景,日常使用优先推荐createRequire方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:27:09