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

Electron中使用TypeScript的UtilityProcess报错:无法在模块外使用import语句

解决方案

问题根源

你当前的UtilityProcess.fork调用方式有误:直接传入.ts文件时,Node.js会尝试原生执行TypeScript代码,既不会自动调用ts-node,也无法识别ES模块语法,导致import语句报错。

正确实现方式

方式一:通过ts-node直接执行脚本

调整UtilityProcess.fork的参数,让子进程用ts-node解析并运行TypeScript脚本:

import { UtilityProcess } from 'electron';
import path from 'path';
import { fileURLToPath } from 'url';

// 处理ES模块下的路径定位(主进程用ES模块时需添加)
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const electronProcess = UtilityProcess.fork(
  // 指定ts-node的可执行文件路径
  require.resolve('ts-node'),
  // 传递ts-node参数与目标脚本路径
  ['--esModuleInterop', '--project', path.join(__dirname, 'tsconfig.json'), path.join(__dirname, 'backgroundScript.ts')],
  {
    detached: true,
    stdio: 'ignore',
    cwd: __dirname,
    // 传递环境变量确保ts-node读取正确配置
    env: { ...process.env, TS_NODE_PROJECT: path.join(__dirname, 'tsconfig.json') }
  }
);

electronProcess.start();

方式二:预编译TypeScript脚本(生产环境推荐)

将后台脚本加入electron-react-boilerplate的编译流程,先编译为JavaScript再启动:

  1. 修改项目tsconfig.json,确保后台脚本被纳入编译范围:
{
  "include": [
    "src/main/backgroundScript.ts",
    // 保留原有include路径
  ]
}
  1. 编译完成后,fork生成的JavaScript文件:
import { UtilityProcess } from 'electron';
import path from 'path';

const electronProcess = UtilityProcess.fork(
  path.join(__dirname, 'backgroundScript.js'), // 编译后的脚本路径
  [],
  {
    detached: true,
    stdio: 'ignore',
    cwd: __dirname
  }
);

electronProcess.start();

额外配置检查

  • 若后台脚本使用ES模块语法(import/export),需在脚本所在目录的package.json中添加:
    { "type": "module" }
    
  • 确保ts-node和typescript已安装为项目依赖:
    npm install ts-node typescript --save-dev
    

内容的提问来源于stack exchange,提问作者Peter Stjernholm Meldgaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:52:40