Coffee_Candy

57 分类: nodejs后端开发,cocos游戏开发,宝塔nodejs后端配置篇

Typescript使用多线程worker_threads,import报错解决办法

报错如下,大概的意思就是import不支持,换句话说就是不支持ts语法

[root@VM-20-7-opencloudos xzserver]# nodemon server.ts
[nodemon] 3.1.9
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: ts,json
[nodemon] starting `ts-node server.ts`
Server is running at http://localhost:4000
Worker 错误: /www/wwwroot/xzserver/QueueWorker.ts:1
import { parentPort } from 'worker_threads';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1032:15)
    at Module._compile (node:internal/modules/cjs/loader:1067:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at MessagePort.<anonymous> (node:internal/main/worker_thread:187:24)
    at MessagePort.[nodejs.internal.kHybridDispatch] (node:internal/event_target:647:20)
    at MessagePort.exports.emitMessage (node:internal/per_context/messageport:23:28)
Worker 退出,退出码 1

原因大概就是子线程文件没有继承主线程文件的配置tsconfig.ts导致的问题

解决的办法也相对比较简单,但是要在调用子线程文件的主线程那边处理

子线程要这样子启动,保证你的模块里面包含tsnode,没有的话要下载

const worker = new Worker(path.resolve(__dirname, './worker.ts'),
    {execArgv: ['-r', 'ts-node/register', '--inspect']}); // 假设你的 Worker 文件名是 worker.ts

tsconfig.json如下

{
  "compilerOptions": {
    "esModuleInterop": true,
    // "module": "commonjs",
    "module": "CommonJS",
    "target": "ES6",
    "strict": true
  }
}

2025-03-28T18:57:23.png

#none

作者: Coffee_Candy

版权: 除特别声明,均采用BY-NC-SA 4.0许可协议,转载请表明出处

目录Content

评论已关闭