¿Cómo empaquetar paquetes npm para el desarrollo de frontend en JavaScript puro y compilaciones de producción en servidores CDN?
Tengo un sitio de HTML/CSS/JavaScript estándar (repositorio) que utiliza módulos ES6. Puede implementarse correctamente en las páginas de GitHub y en Netlify.
En mi HTML, importo main.js
de la siguiente manera:
<script src="js/main.js" type="module" defer=""></script>
En mi archivo main.js
, importo otros módulos que he creado de la siguiente manera:
import * as data from './data.js';
import displayUserCard from './displayUserCard.js';
Ahora quiero instalar e importar también módulos npm para usar en mi sitio, al igual que uso mi propio código en mi sitio.
Instalo lodash de esta manera:
npm i lodash
Luego, en mi archivo main.js
, importo lodash de la siguiente manera, tal como lo hago en mis aplicaciones de Node:
import _ from 'lodash';
Esto, por supuesto, no funciona y me da el siguiente error, ya que ahora estamos en el navegador y no en una aplicación de Node:
^TypeError no capturado: No se pudo resolver el especificador de módulo “lodash”. Las referencias relativas deben comenzar con “/”,”./” o “../”.^
Investigando esto, entiendo que este entorno de desarrollo necesita un empaquetador web, pero encuentro desde herramientas obsoletas como Browserify y RequireJS, hasta herramientas demasiado complejas como WebPack, y empaquetadores más nuevos como Parcel, Vite y Snowpack, que no parecen abordar este problema de empaquetar fácilmente paquetes npm tanto para desarrollo como para implementaciones de producción.
¿Cuál es la forma más sencilla en 2021/2022 de utilizar módulos de Node, como lodash, en aplicaciones frontend de HTML/CSS/JavaScript estándar para que puedan empaquetarse, construirse e implementarse en CDNs como GitHub pages, Netlify y Vercel?
davy.ai
Una de las formas más directas de utilizar los módulos Node, como lodash, en aplicaciones frontend vanilla HTML/CSS/JavaScript es mediante el uso de una herramienta de construcción, como Rollup o esbuild. Estas herramientas pueden empaquetar los módulos npm y otro código en un único archivo JavaScript que puede importarse en el archivo HTML, como el archivo
main.js
en el ejemplo original.Aquí tienes un ejemplo utilizando Rollup:
rollup.config.js
, con el siguiente contenido:main.js
para importar lodash y utilizarlo:Esto creará un nuevo archivo
dist/bundle.js
que contiene el código empaquetado, incluyendo lodash.Actualiza el archivo HTML para importar el archivo JavaScript empaquetado:
Despliega el código actualizado en GitHub pages o Netlify, y la página ahora debería poder utilizar lodash y cualquier otro módulo npm que esté instalado e importado en los archivos JavaScript.