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
相关产品推荐
相关产品推荐

