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

如何在TypeScript中使用Node.js worker_threads?解决导入语法报错

解决Node.js + TypeScript使用worker_threads的import语法错误问题

错误原因

用ts-node运行主文件时,主进程的TS代码会被ts-node编译,但Worker线程加载的worker.ts是直接交给Node.js处理的——Node本身无法识别TypeScript的import语法。同时你的tsconfig.json中include仅包含./src目录,scripts下的TS文件不会被编译,最终触发SyntaxError: Cannot use import statement outside a module错误。

解决方案

方案1:先编译所有TS文件再运行

  1. 修改tsconfig.json的include字段,将scripts目录加入,确保所有TS文件都能被编译:
{
  "compilerOptions": {
    "esModuleInterop": true,
    "preserveConstEnums": true,
    "strict": true,
    "resolveJsonModule": true,
    "sourceMap": true,
    "allowJs": true,
    "target": "es2015",
    "outDir": ".build",
    "moduleResolution": "node",
    "lib": ["es2015"],
    "rootDir": "./"
  },
  "include": [
    "./src",
    "./scripts"
  ]
}
  1. 执行TypeScript编译命令:
tsc
  1. 运行编译后的主文件:
node .build/scripts/start.js

方案2:让Worker线程也通过ts-node处理TS文件

在创建Worker时,通过execArgv参数让Worker进程加载ts-node/register,自动编译Worker的TS代码:
修改scripts/start.ts中的Worker创建逻辑:

const worker = new Worker(path.resolve(__dirname, 'worker.ts'), {
    workerData: { config: { a: 'b' }, historicalData: [2, 4] },
    execArgv: ['--require', 'ts-node/register']
});

同时需要确保tsconfig.json的include字段已加入./scripts,让ts-node能正确识别这些文件。

额外注意事项

  • 如果项目使用ES模块(package.json中配置type: "module"),需将tsconfig.json的module字段改为ESNext,并使用ts-node-esm运行脚本,Worker的execArgv需调整为['--loader', 'ts-node/esm']。
  • 确保已安装必要依赖:
npm install -D ts-node typescript

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:47:04