Использование WebWorkers в Typescript с Webpack и работник-загрузчик без пользовательских строк загрузчика - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь заставить веб-работников хорошо играть с Typescript и Webpack's worker-loader .В их документации есть пример достижения этого посредством пользовательского объявления модуля, однако это основывается на использовании синтаксиса webpack worker-loader!./myWorker.

Я хочу иметь возможность загружать работников через пользовательский *.worker.js webpack * 1007.Правило, а не явное перечисление загрузчика в строке импорта.Что-то в машинописи не похоже на определение или изменение объявления модулей, если это простой относительный импорт, и застревает на том факте, что рабочий файл не является модулем, даже с объявлением модуля для него.

У меня есть рабочий, который выглядит как

// test.worker.ts
/// <reference lib="webworker" />

const worker: DedicatedWorkerGlobalScope = self as any;

worker.onmessage = ({ data }) => {
  if (data instanceof Array) {
    worker.postMessage(data.join(' ') + '!');
  }
};

Объявление, которое выглядит как

// custom.d.ts
declare module '*.worker' {
  class TestWorker extends Worker {
    constructor();
  }

  export default TestWorker
}

И используется в моем основном приложении как

import TestWorker from './test.worker';

const testWorker = new TestWorker();
testWorker.onmessage = ({ data }: { data: string }) => {
  console.log(data);
};

testWorker.postMessage([
  'hello',
  'I',
  'am',
  'a',
  'web',
  'worker',
]);

Ошибкавывод

TypeScript error in /worker-test/src/index.tsx(9,24):File '/worker-test/src/test.worker.ts' is not a module.  TS2306

Изменение импорта на worker-loader!./test.worker, кажется, работает и получает машинописный текст для понимания пользовательского объявления, однако я действительно стараюсь избегать использования пользовательских строк загрузчика, поскольку намерение состоит в том, чтобы интегрировать это вcreate-реагировать-приложение, которое не позволяет это.

Есть ли способ получить регулярный относительный импорт для распознавания объявления пользовательского модуля?

...