Para mis alumnos de 1er año, proporcioné una biblioteca simple basada en ES5 escrita usando el Patrón del módulo revelador. Aquí hay un fragmento del módulo / espacio de nombres "principal", que albergará otras extensiones:
window.Library = (function ($) {
if (!$) {
alert("The Library is dependent on jQuery, which is not loaded!");
}
return {};
})(window.jQuery);
Esto funciona para casi el 99.9% de los estudiantes que son nuevos en el desarrollo web y no están usando cosas elegantes como ES6 en combinación con Webpack o Babel.
El 0.1% ahora me ha solicitado que proporcione una versión basada en ES6, que se puede importar correctamente. Estaré encantado de proporcionar esto, pero estoy un poco atascado en cómo abordarlo mejor.
Obviamente quiero mantener el estilo ES5, para que mis alumnos puedan incluir el archivo usando una etiqueta de script y escribir Library.SomeExtension.aFunction();
donde quieran. Además de eso, algunas de las extensiones dependen de jQuery, que se inyecta de manera similar al fragmento anterior.
Ahora estoy buscando alguna forma mantenible para obtener lo mejor de ambos mundos, con una base de código, con jQuery como dependencia. Quiero dar un 99.9% a window.Library
, mientras que quiero darle al 0.1% una forma de usar import Library from 'library'
.
¿Puedo lograr esto con un solo archivo JS que hace ambas cosas? ¿O necesitaría una versión especial de ES6 (no es un problema)? Y sobre todo: ¿cómo reorganizaría mi código (todo similar al fragmento anterior) de tal manera que pueda soportar ambas situaciones?
Cualquiera y todos los punteros serán muy apreciados!
EDITAR: Solo como nota al margen, ya tengo un gulpfile.js
lugar en el que se ejecuta esta biblioteca Babel
, minifiers
y otras cosas. ¡Tener que extender eso para resolver el problema anterior no es un problema!
Library.SubLibrary.functionName
configuración y también en archivos separados, incluso si alguien lo importa como ES6 o cualquier otra cosa. (Esto se debe principalmente a que las extensiones también pueden usarse entre sí y el uso de una configuración estándar de ES6 podría causar referencias circulares).
export
y asigne el otro window
. Estaba pensando que sería genial si ambos se pudieran hacer en un solo archivo, ya que eso se sentiría mucho más elegante, pero la export
palabra clave solo parece funcionar dentro de a type=module
. No sé si hay una solución, o si es simplemente imposible.