相关疑难解决方法(0)

如何使用TypeScript和webpack创建Web worker

当我尝试使用Web worker时,我遇到了一些正确编译我的打字稿的问题.

我有一个像这样定义的工人:

onmessage = (event:MessageEvent) => {
  var files:FileList = event.data;
    for (var i = 0; i < files.length; i++) {
        postMessage(files[i]);
    }
};
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的另一部分,我正在使用webpack worker loader来加载我的worker,如下所示: let Worker = require('worker!../../../workers/uploader/main');

然而,当我需要编译应用程序时,我会遇到一些问题,使得打字稿声明不会对我大喊大叫.根据我的研究,我必须在我的tsconfig文件中添加另一个标准库,以公开worker需要访问的全局变量.这些我指定如下:

{
     "compilerOptions": {
          "lib": [
               "webworker",
               "es6",
               "dom"
          ]
     }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行webpack让它构建一切时,我得到了一堆这样的错误: C:/Users/hanse/Documents/Frontend/node_modules/typescript/lib/lib.webworker.d.ts:1195:13 Subsequent variable declarations must have the same type. Variable 'navigator' must be of type 'Navigator', but here has type 'WorkerNavigator'.

所以我的问题是:如何指定webworker使用lib.webworker.d.ts定义,其他一切遵循正常的定义?

web-worker typescript webpack

26
推荐指数
3
解决办法
2万
查看次数

使用 WebWorker 从导入其他类的文件中导入类会导致 Angular 8 编译失败

我正在使用 Angular v8。我有一个名为的文件model.ts,如下所示。

import {map} from 'rxjs/operators';

export class Person {
 constructor() { }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为的 WebWorker 文件test.worker.ts,如下所示。

/// <reference lib="webworker" />
import {Person} from './bo/model';

addEventListener('message', ({ data }) => {
  const response = `worker response to ${data}`;
  postMessage(response);
});
Run Code Online (Sandbox Code Playgroud)

当我输入时,ng compile我得到以下内容ERROR

./src/app/test.worker.ts (./node_modules/worker-plugin/dist/loader.js!./src/app/test.worker.ts) 中的错误
模块构建失败(来自 ./node_modules/worker-plugin/dist/loader.js):
错误:node_modules/rxjs/internal/types.d.ts(45,13):错误 TS2339:类型“SymbolConstructor”上不存在属性“observable”。

    在 AngularCompilerPlugin._update (/Users/jwayne/my-app/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:767:31)
    在 processTicksAndRejections (internal/process/task_queues.js:89:5)
    在异步 AngularCompilerPlugin._make (/Users/jwayne/my-app/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:658:13)

如果我注释掉import {map} from 'rxjs/operators',那么我可以编译。导入导入其他库的库是否有限制?

有趣的是,如果我执行此导入,import {HttpClient} from '@angular/common/http';则会出现如下不同的错误。

./src/app/test.worker.ts …

javascript web-worker typescript webpack angular

5
推荐指数
1
解决办法
1151
查看次数

标签 统计

typescript ×2

web-worker ×2

webpack ×2

angular ×1

javascript ×1