Я некоторое время использую Web Workers, но только сейчас обнаружил необходимость импортировать в них модуль. Попытавшись сделать это, я был несколько шокирован, обнаружив, что это невозможно в Firefox Dev 76. Изучив это решение проблемы, я несколько растерялся. Вот что я делаю:
У меня есть работник, которому нужно импортировать модуль NodeJS, который работает в браузере. Этот работник генерируется из заданной строки кода. Итак, внутри сгенерированного работника я запускаю:
//worker
let { foo } = importScripts("http://localhost:3000/some-blob-url");
, который успешно импортирует любой другой код. Я также, обнаружив импорт в заданной строке кода, запускаю этот код для создания другого URL с кодом импорта, который экспортирует ту часть модуля, которую я хочу.
let blobURL = URL.createObjectURL(new Blob([importingCode], { type: 'application/javascript' }));
Где importingCode
- это :
import { foo } from 'module';
export { foo };
Однако после импорта URL-адреса BLOB-объекта в worker.js
мне говорят, что импорт может происходить только на верхнем уровне модуля, подразумевая, что этот созданный BLOB-объект не является модулем (importingCode ).
Как бы я инициализировал createObjectURL
, учитывая блоб кода, как модуль, поддерживающий импорт. Я знаю, что в ответе, на который я ссылался, используются операторы Webpack require
, но я бы хотел здесь избегать использования Webpack. Можно ли это сделать?
Извините, если мой вопрос неопределенный, пожалуйста, скажите мне, и я с удовольствием уточню.