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

升级至Node.js 20后使用@yao-pkg/pkg打包的可执行文件运行报错求助

解决pkg打包ES模块为exe时的ERR_REQUIRE_ESM错误

错误信息(中文翻译)

node:internal/modules/cjs/loader:1432
throw err;
^

Error [ERR_REQUIRE_ESM]: 不支持使用require()加载ES模块 C:\snapshot\backend\bundle\app.js。
app.js被视为ES模块文件,因为它是一个.js文件,其最近的父级package.json包含"type": "module",这会将该包范围内的所有.js文件声明为ES模块。
你可以选择以下方式解决:将app.js重命名为以.cjs结尾;修改调用代码使用动态import()(该方法在所有CommonJS模块中都可用);或者将C:\snapshot\backend\package.json中的"type": "module"改为"type": "commonjs",这样所有.js文件都会被视为CommonJS模块(ES模块改用.mjs后缀)。

at Function.runMain (pkg/prelude/bootstrap.js:1983:12) {
code: 'ERR_REQUIRE_ESM'
}

Node.js v20.11.1

可行解决方案

  • 调整package.json模块类型:打开项目根目录的package.json,将"type": "module"替换为"type": "commonjs"。如果项目中存在ES模块,把对应的文件后缀改为.mjs即可。
  • 重命名入口文件:把app.js改名为app.cjs,同时在package.json里更新"main"字段的值为"app.cjs",确保pkg能正确定位入口文件。
  • 改用动态导入:找到代码中使用require()加载app.js的位置,替换为import('./app.js')的动态导入方式,注意这种方式需要处理异步逻辑(比如用async/await包裹)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:55:17