Los scripts antiguos diseñados para usarse directamente con la etiqueta < script >, usan varias variables globales y algunas características que no funcionan dentro de ES6 con el modo estricto predeterminado.
Por ejemplo:
Uncaught TypeError: Failed to execute 'importScripts' on 'WorkerGlobalScope': Module scripts don't support importScripts().¿Cómo podemos hipotéticamente hacer algo como esto?
var coolModule = magicImport( 'oldstyle_library.js' )O mejor aún:
var coolIsolatedModule = magicImportWrapContain( 'oldstyle_library.js' )El resultado deseado es alguna forma de importar ES5 o javascript de estilo antiguo en un objeto perfectamente aislado, como el módulo de importación ES6. Las soluciones salvajes y extrañas son bienvenidas.
Cree un elemento DOM de secuencia de comandos, configure el script src, insértelo en el cuerpo. haz lo siguiente en el evento 'onload'. Es como
const script = document.createElement("script"); script.src = 'oldstyle_library.js'; script.onload = function() { //get the library exports here }; document.body.appendChild(script);pero es asíncrono. Puede usar Promise para implementar la función magicImport.
Un implemento por ejemplo:
function magicImport(src, globalVar) { return new Promise(resolve => { let exports = window[globalVar]; if(exports) { resolve(exports); } else { const script = document.createElement("script"); script.src = src; script.onload = function() { resolve(window[globalVar]); }; document.body.appendChild(script); } }); } magicImport("jquery.js", "jQuery").then(jQuery => { //do what you want with jQuery }); // or use async/await const jQuery = await magicImport("jquery.js", "jQuery"); //do what you want with jQuery