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

Node.js单可执行程序报错:无法在模块外使用import语句

Node.js SEA打包后ES模块报错解决方案

问题分析

你已经在package.json中设置了"type": "module",本地用node main.js运行正常,但打包成单可执行文件main.exe后,出现SyntaxError: Cannot use import statement outside a module错误。核心原因是SEA打包过程中没有正确识别项目的ES模块类型,即使package.json配置了相关项,生成的blob文件也未纳入该配置。

解决方案

1. 修正sea-config.json配置

在sea-config.json中明确添加"type": "module"字段,确保打包时识别ES模块:

{
    "main": "main.js",
    "output": "sea-prep.blob",
    "type": "module"
}

2. 重新生成sea-prep.blob

在项目根目录执行以下命令,强制指定输入类型为ES模块:

node --experimental-sea-config sea-config.json --input-type=module

3. 重新生成可执行文件

覆盖原有的main.exe,重新注入blob到node.exe:

copy /b node.exe+sea-prep.blob main.exe

4. 备选方案:强制使用.mjs后缀

如果上述方法无效,直接将主文件改为.mjs后缀,绕开package.json的类型配置:

  • 将main.js重命名为main.mjs
  • 修改sea-config.json:
    {
        "main": "main.mjs",
        "output": "sea-prep.blob"
    }
    
  • 修改package.json的main字段为"main.mjs"
  • 重复步骤2和3重新打包

5. 额外检查点

  • 确保所有ES模块的导入路径都带有完整的.js后缀(你的代码中已经做到了,这点没问题)
  • 确认打包时所有命令都是在项目根目录执行,保证Node.js能读取到package.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:02:11