当前位置: 首页 > 知识库问答 >
问题:

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

籍靖
2023-03-14
import {map} from 'rxjs/operators';

export class Person {
 constructor() { }
}

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

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

addEventListener('message', ({ data }) => {
  const response = `worker response to ${data}`;
  postMessage(response);
});

当我键入ng compile时,我会得到以下错误

ERROR in ./src/app/test.worker.ts (./node_modules/worker-plugin/dist/loader.js!./src/app/test.worker.ts)
Module build failed (from ./node_modules/worker-plugin/dist/loader.js):
Error: node_modules/rxjs/internal/types.d.ts(45,13): error TS2339: Property 'observable' does not exist on type 'SymbolConstructor'.

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

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


ERROR in ./src/app/test.worker.ts (./node_modules/worker-plugin/dist/loader.js!./src/app/test.worker.ts)
Module build failed (from ./node_modules/worker-plugin/dist/loader.js):
Error: node_modules/@angular/core/core.d.ts(1470,29): error TS2304: Cannot find name 'Element'.
node_modules/@angular/core/core.d.ts(1471,29): error TS2304: Cannot find name 'Element'.
node_modules/@angular/core/core.d.ts(1538,26): error TS2304: Cannot find name 'Node'.
node_modules/@angular/core/core.d.ts(1539,29): error TS2304: Cannot find name 'Node'.
node_modules/@angular/core/core.d.ts(7082,33): error TS2304: Cannot find name 'Node'.
node_modules/@angular/core/core.d.ts(8711,81): error TS2304: Cannot find name 'HTMLElement'.
node_modules/@angular/core/core.d.ts(8822,15): error TS2304: Cannot find name 'HTMLElement'.
node_modules/@angular/core/core.d.ts(9753,62): error TS2304: Cannot find name 'Element'.
node_modules/@angular/core/core.d.ts(9755,62): error TS2304: Cannot find name 'Node'.
node_modules/@angular/core/core.d.ts(9778,59): error TS2304: Cannot find name 'Element'.
node_modules/@angular/core/core.d.ts(9820,82): error TS2304: Cannot find name 'HTMLElement'.
node_modules/@angular/core/core.d.ts(10214,83): error TS2304: Cannot find name 'HTMLElement'.
node_modules/@angular/core/core.d.ts(12863,20): error TS2304: Cannot find name 'Document'.
node_modules/@angular/core/core.d.ts(12866,13): error TS2304: Cannot find name 'HTMLElement'.
node_modules/@angular/core/core.d.ts(12874,20): error TS2304: Cannot find name 'Document'.
node_modules/@angular/core/core.d.ts(12877,13): error TS2304: Cannot find name 'Document'.
node_modules/@angular/core/core.d.ts(12885,20): error TS2304: Cannot find name 'Document'.
node_modules/@angular/core/core.d.ts(12888,13): error TS2304: Cannot find name 'Window'.

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

请注意,我使用的是ng-cli V8.0.2。


共有1个答案

郑燕七
2023-03-14

我不确定RXJS/Operators导入有什么问题,但我知道HttpClient导入有什么问题。

问题是Web工作者无法访问DOM(https://stackoverflow.com/a/58414760/10452581)。不能使用@angull/common,因为它访问DOM。我正在处理类似的问题(我试图在worker中使用管道,这些管道从@angull/common)导入。这非常令人沮丧,因为我使用的@angull/common的方法和类与DOM无关。到目前为止,我找到的唯一可能的解决方案是在worker之外(如果可能的话)使用操作DOM的库来完成您需要完成的工作。

TL;DR:您不能在web worker中访问DOM,甚至不能使用访问它的库,所以如果可能的话,请在worker之外进行访问。

 类似资料:
  • 这个问题一直让我发疯。我正在尝试从同一目录中的文件导入一个类。PyCharm给了我“未解析引用”错误在中定义。 我发现了这些问题: PyCharm中未解决的引用问题 Py PyCharm显示有效代码的未解析引用错误 使用从兄弟子包导入时未解析的引用 我有以下项目结构: 我已将 src 标记为源根... 我已经设置了“将源根添加到PYTHONPATH”: 我试过文件- 如果我尝试运行它,我在控制台中

  • 因此,我有一个Project1与类A。我有Project2与类B。如何将类A导入到B,而不必在Project2等中创建一个新类。我知道这与构建路径有关,但是我如何添加,以便我可以编写类似于导入Project1/A;的东西?

  • 问题内容: 对于这两个进口; 我收到此错误: 如何解决此错误? 问题答案: 该错误是由您的Eclipse配置引起的。您可以将其减少为警告。更好的是,使用不属于非公共API的Base64编码器。Apache Commons有一个,或者当您已经使用Java 1.8时,请使用。

  • 我试图使用以下代码调用非活动类中的新活动: 我有一个UsageActivity,它有以下代码: 在onCreate()下面 我创建了这样一个方法: 它抛出一个异常,说: 08-23 12:51:39.439:E/AndroidRuntime(15059):致命异常:main 08-23 12:51:39.439:E/AndroidRuntime(15059):java。lang.NullPoint

  • 问题内容: 如何在Python中导入其他文件? 我到底该如何导入特定的文件呢? 如何导入文件夹而不是特定文件? 我想根据用户输入在运行时动态加载Python文件。 我想知道如何从文件中仅加载一个特定部分。 例如,在我有: 尽管这给了我中的所有定义,但也许我只想要一个定义: 我要从import语句中添加些什么? 问题答案: 是Python中的新增功能,用于以编程方式导入模块。它只是一个包装器,请参见

  • 问题内容: 在将其标记为重复之前, 请阅读我的问题: 我正在尝试从子目录的文件中导入类 并且在我的课程中有()我尝试了什么: 放入main.py: 我收到错误消息: 从文件导入Klasa ImportError:没有名为“文件”的模块 当我尝试使用时: 我收到此错误: tmp = Klasa() NameError:未定义名称“ Klasa” 我在子文件夹中放了一个空格,它仍然不起作用,而我在 :