【问题标题】:Worker threads with ts-node带有 ts-node 的工作线程
【发布时间】:2022-02-19 19:01:59
【问题描述】:

我计划为 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"
  ],
}

【问题讨论】:

    标签: node.js typescript ts-node worker-thread


    【解决方案1】:

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

    • 您通过在命令行上要求 ts-node 来运行您的主应用程序:

      node -r ts-node/register index.ts
      
    • 你的worker入口点是一个.ts文件,你将它实例化如下:

      new Worker('./worker.ts')
      
    • 您的工作脚本顶部附近有以下代码:

      require('ts-node').register();
      

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

    require('ts-node').register();
    

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

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

    在使用 worker 时,您还需要牢记一些其他问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 2019-03-05
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多