Resumen

Cada vez que una auditoría de rendimiento señala que un archivo JavaScript pesa demasiado, que hay CSS sin usar o que las imágenes no están comprimidas, surge la misma pregunta: ¿vamos a corregir todo eso a mano? La respuesta está en los empaquetadores o bundles, herramientas que automatizan la optimización, compresión, minificación y eliminación de código muerto para que nuestros archivos de producción sean lo más ligeros y rápidos posible.

¿Qué problema resuelven los empaquetadores?

Un empaquetador toma nuestros archivos fuente —JavaScript, CSS, SASS, imágenes— y les aplica una serie de transformaciones automáticas [01:00]. Detecta código que no se utiliza y lo elimina, comprime hojas de estilo, reduce el peso de imágenes y genera archivos finales listos para producción. Todo ese flujo que podríamos hacer de forma manual queda delegado a una sola herramienta.

El concepto de minificación consiste en reducir el tamaño del código eliminando espacios, comentarios y caracteres innecesarios. El de eliminación de código muerto (tree shaking) va un paso más allá: identifica funciones o estilos que nunca se invocan y los descarta del paquete final.

¿Por qué webpack fue el estándar durante años?

Webpack es el empaquetador más conocido y uno de los más antiguos [01:33]. Recibe archivos de JavaScript, SASS, imágenes y les aplica optimización, compresión y reducción de código para generar bundles procesados. Su limitación principal es que está escrito completamente en JavaScript, lo que hace que su proceso de transformación sea relativamente lento comparado con las alternativas modernas.

¿Qué alternativas modernas existen y por qué son más rápidas?

La nueva generación de empaquetadores ha reemplazado JavaScript interno por lenguajes de bajo nivel:

  • Parcel: ofrece resultados similares a webpack pero con tiempos de compilación notablemente menores [02:22].
  • esbuild: escrito en Go, logra empaquetar en 0.39 segundos lo que webpack tarda 41 segundos [02:38]. Esa diferencia es crítica en ciclos de integración continua, donde cada minuto de compilación retrasa el envío de releases a producción.
  • Turbopack: creado por Vercel, la empresa detrás de Next.js [03:30]. Es muy rápido, pero su principal desventaja es que está casi exclusivamente configurado para funcionar con Next.js, aunque el equipo trabaja para abrirlo a toda la comunidad.

¿Por qué Vite se ha convertido en el empaquetador preferido?

Vite proviene del equipo de Vue.js y se posiciona como un build tool completo [04:02]. Utiliza Rust, un lenguaje de bajo nivel creado por Mozilla, para ejecutar las transformaciones de forma extremadamente rápida. A diferencia de Turbopack, Vite es completamente abierto: funciona con JavaScript Vanilla, Angular, Vue, React y prácticamente cualquier framework.

Para crear un proyecto con Vite basta ejecutar npm create vite@latest en la terminal [04:40]. El asistente pregunta el nombre del proyecto, el framework deseado —o Vanilla si no usamos ninguno— y si preferimos TypeScript o JavaScript. También ofrece la opción de usar Rolldown, su nuevo builder interno enfocado en rendimiento [05:32].

¿Cómo mejora Vite el flujo de desarrollo?

Vite no solo prepara el código para producción; también transforma la experiencia de desarrollo [06:22]. Incluye un servidor de desarrollo con recarga automática (hot reload): cada vez que guardamos un cambio, el navegador se actualiza sin necesidad de refrescar manualmente. La estructura que genera es sencilla: un index.html, una carpeta public y un directorio src donde vive el archivo main.js junto con los componentes y estilos.

Un detalle importante es la forma en que Vite maneja los estilos [07:22]. En lugar de enlazar hojas CSS con una etiqueta <link> en el HTML, importamos los archivos CSS directamente desde JavaScript. Esto permite que el empaquetador los preprocese, elimine reglas no utilizadas y genere un CSS optimizado.

¿Cómo integrar Vite en un proyecto existente de JavaScript Vanilla?

Si ya tienes un proyecto sin empaquetador, la recomendación es iniciar un proyecto nuevo con el boilerplate de Vite y luego trasladar el código Vanilla a esa estructura [08:10]. El proceso inverso también es posible, pero resulta más limpio partir de la configuración que el empaquetador ya proporciona.

Cuando eliges un framework, el empaquetador suele venir predefinido [09:05]:

  • Next.js utiliza Turbopack por defecto.
  • Angular trabaja con esbuild o Vite; el equipo de Angular colabora activamente con el de Vite.
  • Vue usa Vite de forma nativa, ya que comparten creadores.

En la práctica, la industria se está moviendo hacia Vite como empaquetador de referencia por su velocidad, flexibilidad y comunidad activa. Si estás comenzando un proyecto o migrando uno existente, vale la pena adoptarlo desde el inicio para aprovechar todas sus optimizaciones desde el primer commit.