Может ли скрипт, импортированный веб-работником, в свою очередь импортировать другой скрипт?

#javascript #import #web-worker

#javascript #импорт #веб-рабочий

Вопрос:

Шаблон для скрипта, используемого веб-работником https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers есть:

  • webworker.js

     importScripts('./parent.js')
      
  • parent.js

     import { PerfManager} from "./child.js";
      

Результатом child.js импорта является:

Неперехваченная ошибка синтаксиса: невозможно использовать оператор import вне модуля

Есть ли какой-либо способ реализовать импорт в parent.js when used by webworker.js ?

Комментарии:

1. если вы хотите использовать import вместо importScripts, вам нужно использовать babel для компиляции parent.js а затем используйте importScript(‘./compile.parent.js ‘)

Ответ №1:

Вы можете запустить рабочий модуль (в настоящее время доступен только в браузерах на основе Blink).

 const worker = new Worker("worker.js", { type: "module" });
  

Тогда вместо importScripts вас будет напрямую import parent.js из этого рабочего скрипта, который, в свою очередь, сможет импортировать любую зависимость.

Поскольку пакеты стеков находятся в фреймах с нулевым исходным кодом, я должен передать демонстрацию на аутсорсинг этому plnkr.


Обратите внимание, что в этих браузерах вы даже можете использовать динамический import() оператор из parent.js даже в немодульном рабочем: plnkr, но это все равно не будет работать в браузерах, которые не поддерживают рабочие модули.
Для этого вам нужно использовать только немодульные скрипты и использовать importScripts и его глобальные переменные по всей цепочке: plnkr.

Комментарии:

1. Я продолжаю chrome : он поддерживает module workers , и фактически мы используем их сейчас. Но временные зависимости не принимаются — по крайней мере, не в Intellij. Это значит, что IJ слишком придирчив?

2. Может быть, я действительно не знаю эту среду IDE, но она должна работать, как показано в plunkers; .