Electron应用打包后出现SyntaxError: Unexpected token异常求助
问题分析
你遇到的语法错误核心原因是:Electron 1.4.3内置的Node.js版本(v6.5.0)不支持async/await语法,而你的TypeScript编译输出保留了async () => {}这种高版本语法,导致运行时无法解析。
Node.js v6.x仅支持ES6的大部分特性,async/await是ES2017的语法,直到Node.js v7.6.0才正式纳入支持,所以Electron 1.4.3的运行环境无法识别该语法。
解决方案
根据你的需求,提供两种可行方案:
方案一:升级Electron版本(推荐)
如果没有必须使用1.4.3的硬性要求,直接升级Electron到v7.0及以上版本(对应Node.js v12+,完全支持async/await)。修改打包命令中的--electron-version参数即可,比如:
electron-packager . testApp --platform=win32 --arch=x64 --electron-version=7.3.3
升级后无需修改代码或编译配置,直接重新编译打包即可。
方案二:调整编译配置兼容Node.js v6.x(适配旧版本)
如果必须保留Electron 1.4.3,需要让TypeScript编译后的代码完全兼容Node.js v6.x:
修改
tsconfig.json的编译配置:{ "compilerOptions": { "target": "es6", "lib": ["es2015", "dom"], "module": "commonjs", "outDir": "./build", "strict": true, "downlevelIteration": true, "esModuleInterop": true }, "include": ["src/**/*"] }target: "es6":确保输出代码适配Node.js v6的ES6支持范围lib: ["es2015", "dom"]:避免引入ES2017及以上的语法特性downlevelIteration:处理迭代器相关的兼容问题(如果代码中用到)
替换
async/await语法为Promise链式调用
TypeScript在target: es6时不会转译async/await,所以需要手动修改代码:
原代码:app.on("ready", async () => { // 包含await的代码 await someAsyncFunction(); // 其他逻辑 });修改为:
app.on("ready", () => { someAsyncFunction() .then(() => { // 其他逻辑 }) .catch(err => { // 错误处理 console.error(err); }); });确认打包入口正确
在package.json中确保main字段指向编译后的文件:{ "main": "./build/main.js" }重新编译打包
先执行tsc编译,再运行原来的electron-packager命令。
额外检查
- 编译后查看
build/main.js第39行,确认已经没有async () => {}这类语法 - 确保打包时没有包含未编译的TypeScript源码,避免Electron错误加载ts文件
内容的提问来源于stack exchange,提问作者dododingo
相关产品推荐
相关产品推荐

