#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; .