带有 ts-node 的工作线程

Bla*_*ine 4 worker-thread node.js typescript ts-node

我计划为 socket.io 房间提供工作线程。我在与房间的第一个连接上创建一个工作线程,然后设置 firebase 侦听器。

很遗憾。我在工作文件和我的主要源代码中有常见的导入。

我按照这篇文章允许通过worker_threads运行ts文件 - > https://wanago.io/2019/05/06/node-js-typescript-12-worker-threads/

不幸的是,我没有得到顶级等待,并且在启动工作线程时,出现以下错误。 error TS2451: Cannot redeclare block-scoped variable 'tslib_1'.\r\n"

这是我的 tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "lib": ["esnext"],
    "module": "commonjs",
    "importHelpers": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "baseUrl": ".",
    "sourceMap": true,
    "declaration": false,
    "noImplicitAny": false,
  },
  "files": [
    "typings.d.ts"
  ],
}
Run Code Online (Sandbox Code Playgroud)

ben*_*der 8

您尚未提供有关如何运行应用程序的任何信息,因此我将假设以下设置:

\n\n

假设这是您的设置,您需要删除该行

\n
require(\'ts-node\').register();\n
Run Code Online (Sandbox Code Playgroud)\n

来自您的工作人员入口点脚本。此行基本上导致 TypeScript 文件被 编译两次ts-node,因此出现双重声明错误tslib_1

\n

ts-node仅当您的主程序不以该标志启动时,才需要像上面那样手动注册-r ts-node/register。如果是,那么ts-node当您实例化您的工作线程时将自动需要它,并将即时编译所请求的 TS 源。

\n

使用 Worker 时还必须记住其他一些问题:

\n
    \n
  • APInew Worker(...)相对于您的工作目录解析请求的文件,如果您想相对于当前源文件解析,您需要执行如下操作:new\xc2\xa0Worker(path.resolve(__dirname,\xc2\xa0\'./worker.ts\'))
  • \n
  • 如果您不在ts-node生产中使用,而是通过 编译源代码tsc,则在源代码编译为 JS 后,您将无法加载工作脚本,您的工作文件将变成worker.js(注意文件扩展名)。您需要检测这种情况并相应地更改路径。
  • \n
\n