凯凯本凯 2023-05-24 23:22 采纳率: 72.5%
浏览 13

Node.js 使用 ESM 规范如何导入 C++ Addons

使用 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
  • 写回答

2条回答 默认 最新

  • 北海屿鹿 2023-05-25 14:23
    关注

    在使用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中仍处于实验性阶段,可能存在一些不稳定性和兼容性问题,建议谨慎使用。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月24日