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

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:

  1. 修改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:处理迭代器相关的兼容问题(如果代码中用到)
  2. 替换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);
        });
    });
    
  3. 确认打包入口正确
    在package.json中确保main字段指向编译后的文件:

    {
      "main": "./build/main.js"
    }
    
  4. 重新编译打包
    先执行tsc编译,再运行原来的electron-packager命令。

额外检查
  • 编译后查看build/main.js第39行,确认已经没有async () => {}这类语法
  • 确保打包时没有包含未编译的TypeScript源码,避免Electron错误加载ts文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:53