Как URL.createObjectUrl () может быть модулем? - PullRequest
0 голосов
/ 15 апреля 2020

Я некоторое время использую 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. Можно ли это сделать?

Извините, если мой вопрос неопределенный, пожалуйста, скажите мне, и я с удовольствием уточню.

...