Tengo un módulo de JavaScript así:
function difference(a, b){ return a - b; } export {difference};Esto funciona bien cuando lo importo a mi script principal.
import * as MathUtils from './math-utils.js';Sin embargo, también quiero importarlo a Web Worker. La única forma de hacer esto entre navegadores parece ser la siguiente:
self.importScripts('/scripts/math-utils.js');Obviamente recibo un error al hacer esto debido a la declaración de exportación al final del módulo. ¿Hay alguna forma de importar el mismo script a un Web Worker que sea multinavegador? ¿O al menos para pasar las funciones al Web Worker desde el script principal?
¡Gracias por adelantado!
Actualizar:
Se me ocurrió este polyfill, que debe llamarse desde dentro de la función onmessage del Worker. Sin embargo, esta no es una solución muy elegante y lo agradecería, si alguien supiera de una mejor manera.
function importScript(path){ return new Promise((resolve, reject) => { fetch(path).then((response) => { if(response.status == 200){ return response.text(); } }).then((script) => { if(typeof(script) == 'undefined'){ // Import failed reject(); } else{ // Remove export statement from script script = script.replace(/export(.*);/m, ''); // Create blob var blob = new Blob([script], {type : 'text/javascript'}); var url = URL.createObjectURL(blob); self.importScripts(url); resolve(); } }); }); }Editar: Esto no es un duplicado de Web Workers - ¡Cómo importar módulos !
Las respuestas aceptadas sobre esa pregunta solo representan los navegadores basados en Chromium, estoy buscando una solución de navegador cruzado.