使用 import 语法时:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".node"
使用 require 语法时:
ReferenceError: require is not defined in ES module scope, you can use import instead
使用 import 语法时:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".node"
使用 require 语法时:
ReferenceError: require is not defined in ES module scope, you can use import instead
在使用ESM规范导入C++ Addons时,需要注意以下几点:
1、首先需要在Node.js中启用ESM模块,可以在命令行中使用--experimental-modules选项启用ESM模块,例如:
node --experimental-modules app.mjs
或者在package.json中添加"type": "module"字段,表示使用ESM模块,例如:
{
"type": "module",
"main": "app.mjs"
}
2、在ESM模块中,不能使用require语法导入C++ Addons,需要使用import语法导入。例如:
import addon from './addon.node';
这里的./addon.node是C++ Addons编译生成的二进制文件,需要注意路径是否正确。
3、如果在使用import语法时出现TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".node"错误,可以尝试在package.json中添加"exports"字段,指定.node文件的导入方式。例如:
{
"type": "module",
"main": "app.mjs",
"exports": {
".": {
"require": "./addon.node"
}
}
}
这里的"./addon.node"是C++ Addons编译生成的二进制文件路径,需要根据实际情况修改。
需要注意的是,ESM规范在Node.js中仍处于实验性阶段,可能存在一些不稳定性和兼容性问题,建议谨慎使用。