использование угловых модулей в веб-работниках - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь использовать угловой 8-джитовый компилятор в WEB WORKER, но получаю ошибку при попытке импортировать модуль компилятора или любой другой угловой модуль в файле web-worker.ts

/// <reference lib="webworker" />
import {Compiler } from '@angular/core';

addEventListener('message', ({ data }) =>
 {
  let response = `worker response to ` + data  ;


});       

node_modules/@angular/core/core.d.ts: 13052: 20 - ошибка TS2304: не удается найти имя «Документ».

1 Ответ

1 голос
/ 16 октября 2019

Веб-работник не имеет доступа к DOM, поэтому объект document в окне недоступен ни вам, ни любому другому импортированному модулю. См. Эту цитату из этого хорошо объясненного ответа от TJ Crowder :

Обслуживающие работники - веб-работники в целом - не имеют прямого доступа кДОМ вообще. Вместо этого пусть рабочий отправит информацию в основной поток, а код в основном потоке обновит DOM соответствующим образом. Модель потоков для JavaScript в браузерах заключается в том, что существует только один основной поток пользовательского интерфейса (по умолчанию, в котором выполняется код на странице), который может получить доступ к DOM. Остальные от него отгорожены.

Кроме того, не забудьте настроить вашего работника как тип модуля:

@Injectable()
export class SomeWorkerService {
  private readonly worker = new Worker('./custom.worker', { type: 'module' }); 
  ...
}
...