Tag: Vite

  • Nuevo Vite 8.1

    Nuevo Vite 8.1

    El lunes arrancas la semana, abres el proyecto, y ves que hay una nueva versión de Vite disponible. La actualizas casi en automático — llevas años confiando en que las minor no rompen nada.

    Esta vez, una advertencia en la consola: está deprecado. Buscas en la documentación. El nombre cambió. Nada grave, pero te detiene cinco minutos.

    Eso es exactamente lo que hace Vite 8.1: llega sin hacer ruido, resuelve cosas que probablemente ya te estaban molestando sin que lo supieras, y mete una feature experimental que puede cambiar cómo experimentas el desarrollo en proyectos grandes. Si todavía no la has revisado, este post te ahorra el tiempo de buscarla tú.

    se publicó el 23 de junio de 2026 y, según las propias métricas del proyecto, ya hay 41,6 millones de descargas semanales — casi las mismas que acumuló toda la era de Vite 7.

    Vite 8.1 es la versión minor del bundler de frontend que introduce bundled dev mode experimental, soporte WASM ESM nativo, chunk import maps y mejoras en LightningCSS — todo sobre la base de Rolldown, el motor Rust que reemplazó a esbuild y Rollup en Vite 8.0.


    El dev server de Vite siempre ha funcionado en modo _unbundled_: sirve cada módulo como un fichero independiente aprovechando ESM nativo del navegador. Es lo que lo hace rápido en proyectos medianos. El problema viene cuando el proyecto crece.

    En una app con 10.000 componentes React, el navegador tiene que resolver 10.000 requests en cadena. El HMR se mantiene instantáneo, pero la carga inicial y los reloads completos se vuelven lentos.

    junta los módulos antes de servirlos — igual que haría un build de producción, pero con la ventaja de que el HMR sigue siendo incremental y preciso. Los números que publica el equipo de Vite:

    • ~15x de arranque más rápido para apps grandes
    • ~10x de reloads completos más rápidos
    • 10x menos requests de red

    El equipo de Linear (la herramienta de gestión de proyectos) lo probó en producción: cold start 3x más rápido, reloads 40% más rápidos.

    Para activarlo, tienes dos opciones:

    # Desde la CLI
    vite --experimental-bundle
    // vite.config.ts
    export default defineConfig({
      experimental: {
        bundledDev: true,
      },
    })

    Es experimental. No lo actives en CI ni en producción todavía — el equipo todavía lo está refinando. Pero en desarrollo local, sobre todo si tu proyecto tiene cientos de rutas o módulos, pruébalo esta semana.


    Hasta ahora, importar un módulo WebAssembly en Vite requería configuración extra o un plugin. En Vite 8.1 ya es nativo con la integración de :

    import { add } from './add.wasm'
    
    

    console.log(add(1, 2)) // 3

    Sin configuración adicional. Sin plugins. El módulo expone sus funciones directamente como named exports de ES Module.

    Esto es relevante si estás construyendo herramientas de procesamiento de datos, encoders, parsers, o cualquier lógica computacionalmente intensiva que tenga sentido compilar desde Rust o C. El flujo de trabajo Rust → → Vite ya no tiene fricción.


    El problema de los hashes en cascada es conocido: cambias una línea en un componente, el hash de ese chunk cambia, y ese cambio se propaga al chunk que lo importa, que cambia su hash también, y así en cadena. El resultado: el navegador invalida más caché de la necesaria.

    Vite 8.1 introduce soporte para como feature experimental. En lugar de que los hashes de los módulos dependientes cambien cuando cambia un imported chunk, el import map actúa como capa de indirección. El chunk padre sigue apuntando al mismo nombre lógico; el import map resuelve el nombre al hash real.

    // vite.config.ts
    export default defineConfig({
      experimental: {
        bundledDev: true,
        // chunkImportMap se activa automáticamente con bundledDev
      },
    })

    No requiere configuración adicional en . Limitación actual: no es compatible con . Si lo usas, espera a que lo resuelvan antes de activarlo.


    Vite lleva varios releases preparando el terreno para que LightningCSS sustituya a PostCSS como procesador CSS por defecto. En 8.1 llegan dos adiciones concretas:

    1. dentro de archivos CSS cuando usas LightningCSS
    2. mediante plugins — necesario para que el HMR funcione correctamente cuando un plugin modifica ficheros que no están directamente en el grafo de dependencias

    Para activar LightningCSS:

    // vite.config.ts
    export default defineConfig({
      css: {
        transformer: 'lightningcss',
      },
    })

    Si ya estás en , estas dos adiciones te llegan sin hacer nada. Si sigues con PostCSS, no hay prisa — pero la dirección del proyecto es clara.


    tiene un bug silencioso en el que la opción funcionaba en la resolución inicial de módulos pero no en el matching del HMR. Cambiabas un fichero, y Vite no lo detectaba si el nombre diferenciaba mayúsculas/minúsculas de forma inesperada.

    En 8.1 ya está corregido:

    const modules = import.meta.glob('./dir/module*.js', {
      caseSensitive: false,
    })

    Ahora tanto la resolución inicial como el HMR respetan la misma sensibilidad a mayúsculas. Si tenías workarounds para esto, puedes eliminarlos.


    Vite detecta assets en el HTML buscando atributos conocidos: , , , etc. Si tienes elementos o atributos custom que referencian assets, Vite los ignoraba.

    Ahora puedes configurarlo explícitamente:

    // vite.config.ts
    export default defineConfig({
      html: {
        additionalAssetSources: [
          { tag: 'my-image', attribute: 'data-src' },
          { tag: 'x-video', attribute: 'poster-url' },
        ],
      },
    })

    Útil si trabajas con Web Components o frameworks que usan atributos no estándar para referenciar recursos.


    Vite ahora amplía la lista de ficheros denegados por defecto en . Ficheros comunes que no deberían exponerse en el dev server quedan bloqueados sin que tengas que configurarlo manualmente.

    Si tienes una configuración explícita de , revísala — puede haber solapamientos. Si confías en el comportamiento por defecto, simplemente tienes una superficie de ataque más pequeña sin hacer nada.


    Este es el cambio que genera la advertencia de deprecación que mencioné al principio.

    La opción tenía un nombre ambiguo — HMR es el protocolo, pero la configuración afectaba al WebSocket server completo, que también se usa para comunicaciones que no son HMR. El nuevo nombre refleja mejor qué estás configurando.

    // Antes (deprecado en 8.1)
    export default defineConfig({
      server: {
        hmr: {
          port: 24678,
          host: 'localhost',
        },
      },
    })
    
    

    // Ahora export default defineConfig({ server: { ws: { port: 24678, host: 'localhost', }, }, })

    La opción antigua sigue funcionando — verás el warning pero no se rompe nada. Migra cuando puedas, no es urgente.


    Vite 8.1 integra soporte para con caché de build zero-config. Si ya estás usando Vite Task (la nueva API de tareas del ecosistema), los builds se cachean automáticamente sin configuración adicional.

    Es una adición menor para la mayoría de proyectos, pero importante si tienes monorepos donde los builds repetidos son costosos.


    La migración desde 8.0 es prácticamente sin fricción. Los pasos concretos:

    # npm
    npm install vite@^8.1 --save-dev
    
    

    # pnpm pnpm update vite@^8.1

    # yarn yarn upgrade vite@^8.1

    # bun bun update vite

    Después de actualizar, revisa estos tres puntos:

    si tienes configuración explícita del WebSocket server. La advertencia en consola te lo indica exactamente.

    si tienes reglas custom. Los nuevos defaults pueden solapar con las tuyas y crear comportamientos inesperados.

    si usas la opción directamente. Migra al sistema estándar de ficheros .

    Si vienes de Vite 7.x, revisa primero la — hay cambios más sustanciales en el salto de major, como el motor Rolldown que reemplaza a esbuild+Rollup. Precisamente, si te interesa cómo Astro v7 aprovecha Vite 8 en producción, tienes el análisis completo en .


    Si estás en Vite 7 y quieres pasar directamente a 8.1, el cambio más importante es . Vite 8.0 reemplazó esbuild (para transform) y Rollup (para bundle) por Rolldown, un bundler escrito en Rust. El resultado es hasta 30x más rápido en builds grandes, pero hay diferencias de comportamiento en edge cases.

    La documentación oficial tiene la guía completa. Lo que suele dar problemas en la práctica:

    • Plugins que asumen comportamientos específicos de Rollup en hooks de resolución
    • Configuraciones de — pasan automáticamente a pero no todo es compatible 1:1
    • Targets de CSS con PostCSS si usas configuraciones muy custom

    Mi recomendación: si tienes un proyecto en producción con Vite 7, dedica una tarde a la migración en una rama separada antes de mergearla. Si además estás evaluando qué herramientas usar en un stack moderno con IA, el post sobre el te da el mapa completo de qué merece la pena y qué ignorar. No es un upgrade de dos minutos, pero tampoco es traumático si el proyecto no tiene plugins exóticos.


    Sí. Vite 8.1 es agnóstico al framework. Los plugins oficiales (@vitejs/plugin-react, @vitejs/plugin-vue, @analogjs/vite-plugin-angular, @sveltejs/vite-plugin-svelte) ya tienen versiones compatibles con Vite 8.x. Verifica en el de cada plugin que el peerDependency incluye .

    Cuando notes que tu dev server tarda más de 3-5 segundos en arrancar o que los reloads completos son lentos. En proyectos pequeños y medianos (menos de 500 módulos), el modo unbundled sigue siendo más rápido. El beneficio de bundled dev mode es proporcional al tamaño del proyecto.

    Casi. LightningCSS cubre la mayoría de casos: prefixing, nesting nativo, variables CSS, imports. Lo que todavía puede requerir PostCSS son plugins muy específicos del ecosistema (px a rem, ciertas transformaciones custom). Si tu stack CSS es estándar, prueba a migrar — las mejoras de velocidad son notables.

    No. Esta opción solo afecta al servidor de desarrollo. En producción, Vite no levanta un WebSocket server — esa configuración es irrelevante. El cambio es puramente de nomenclatura en el dev server.

    Vite 8 requiere Node.js 18+ (igual que Vite 7). Si estás en Node 16 o inferior, tendrás que actualizarlo antes de poder usar Vite 8.x.

    Rolldown es el motor por defecto desde Vite 8.0 y se considera estable para uso en producción. Los flags experimentales son para features específicas (bundled dev mode, chunk import map) — no para Rolldown en sí. Para la mayoría de proyectos, Rolldown funciona como un drop-in replacement de Rollup.


    Vite 8.1 no es una release que te obligue a cambiar cómo trabajas. La mayor parte de las features son opt-in o correcciones de bugs que funcionan transparentemente.

    Lo que sí cambia si lo adoptas activamente:

    El puede hacer que trabajes diferente en proyectos grandes — menos tiempo esperando recargas, más tiempo en el problema real. El abre la puerta a traer lógica Rust o C al frontend sin fricción. Y el empieza a resolver uno de los problemas crónicos del caching en producción.

    Si trabajas con agentes de IA para acelerar tu desarrollo — donde cada segundo de feedback loop importa — el bundled dev mode encaja directamente en ese flujo. Es parte del tipo de optimizaciones que exploramos en el : no solo usar IA para generar código, sino construir un entorno donde iterar sea rápido de verdad.

    Y si quieres ver cómo aplico estas decisiones de toolchain en proyectos reales con código completo, pásate por — ahí está el material avanzado que no llega al blog.


  • Mejorando consistencia y rendimiento con Vite 8.0 y Rolldown

    Mejorando consistencia y rendimiento con Vite 8.0 y Rolldown

    Vite 8.0: lo que duele, lo que mejora y por qué abrir un branch vite8

    Tiempo estimado de lectura: 6 min

    • Ideas clave:
    • Vite 8 unifica motores de build con Rolldown (Rust) para reducir discrepancias entre dev y producción.
    • Environment API estabilizada permite reproducir restricciones de runtime (Edge, Deno, Bun) en desarrollo.
    • Mejoras prácticas: builds más cortos, menos memoria en CI, caché persistente y resolución de módulos más estricta.
    • Hay cambios rompientes: Node 20+, APIs eliminadas y plugins de Rollup que pueden requerir adaptación.

    Introducción

    ¿Quieres que lo que funciona en tu máquina también funcione en producción… o prefieres seguir depurando en Deploy?

    Poca gente habla claro sobre lo que realmente cambia en Vite 8.0. Todos repiten “más rápido” y “mejor”, pero eso es la publicidad. Yo te voy a contar lo que duele, lo que mejora y por qué deberías abrir un branch llamado vite8 antes de que te pille en producción.

    Esto no es una nota de changelog. Es una narración corta donde los protagonistas son herramientas, bugs y tu equipo a las 3 AM.

    La historia empieza así: durante años, Vite usó dos motores. Esbuild para el dev, Rollup para producción. Dos mundos. Dos interpretaciones del mismo código. Dos “sorpresas” a las 11:59 en staging.

    Vite 8.0 corta esa dualidad. Trae a Rolldown: un bundler en Rust que quiere ser el motor único. Y, junto con él, una Environment API más seria y mejoras para Server Components. ¿Resultado? Menos diferencia entre lo que ves y lo que sale al mundo.

    Resumen rápido (lectores con prisa)

    Qué es: Vite 8 unifica el motor de build con Rolldown (Rust) y estabiliza una Environment API.

    Cuándo usarlo: al iniciar proyectos nuevos, en monorepos o si despliegas a entornos Edge.

    Por qué importa: reduce inconsistencias entre desarrollo y producción y mejora tiempos/memoria en CI.

    Cómo funciona: reemplaza la dualidad esbuild/Rollup por Rolldown y añade primitivas para simular entornos de runtime.

    Rolldown: no es solo “rápido”

    Rolldown es la apuesta más ambiciosa. Dime si no suena familiar: alguien crea algo rápido en dev, y otro motor hace magia en producción. Resultado: inconsistencias.

    Rolldown viene a unificar. Está escrito en Rust, que en este contexto significa velocidad y control de memoria. Pero la palabra importante no es “rápido”. Es “consistente”.

    Rolldown es el traductor que no se olvida de matices. Si antes tenías dos intérpretes (esbuild y Rollup) que a veces discrepaban, ahora tienes uno que habla para ambos escenarios.

    Qué ganas con Rolldown

    • Builds más cortos en CI. Sí, esa tarifa mensual de nube lo va a notar.
    • Menos memoria usada en pipelines. Menos procesos que se mueren por OOM.
    • Menos “funciona en mi equipo” y más “funciona en todos lados”.

    Un aviso: no todos los plugins de Rollup serán felices de inmediato. Algunos aún necesitan adaptarse. Si tu repo depende de plugins raros, prueba primero.

    Environment API: lo que te salva de los “works on my machine”

    Hoy una app puede vivir en Node, en un Edge, en Deno o en Bun. Cada runtime tiene sus reglas. Vite 8.0 estabiliza una Environment API que te permite desarrollar sabiendo exactamente en qué contexto vas a ejecutar.

    Eso significa que durante el desarrollo puedes simular las restricciones del entorno final. Si tu target es Cloudflare Workers, lo puedes reproducir localmente. De pronto, el “pero en local funciona” ya no es excusa.

    ¿Qué cambia en la práctica?

    • Bloqueos tempranos de APIs no compatibles.
    • Menos mocks improvisados.
    • Menos horas perdiendo tiempo por “faltaba este polyfill”.

    Server Components y SSR: el juego híbrido sube de categoría

    Los Server Components no son moda: son arquitectura. Vite 8.0 aporta primitivas más claras para RSC y SSR híbrido. ¿Qué significa? Mejores herramientas para frameworks que mezclan render en servidor y cliente sin meter ruido ni hacks.

    Si tu app es isomórfica (parte en server, parte en cliente), Vite 8 te da una base menos frágil para montar esa coreografía.

    Cosas que mejoran tus pipelines (sí, las que importan en dinero)

    No todo es hype técnico. Algunas mejoras se traducen directo en ahorro y en menos tiempo esperando en CI:

    • Pre-bundling optimizado: menos minutos de build, menos burnout del pipeline.
    • Caché persistente mejorada: si trabajas en monorepos o micro-frontends, HMR y recarga serán más fiables.
    • Resolución de módulos más estricta: fuerza a que el código sea más claro y previene importaciones ambiguas que explotan en producción.

    Los “breaking” que duelen y que debes planear

    Vite 8.0 no viene de visita. Viene a poner orden. Y eso implica romper cosas:

    • Node.js 20+ requerido. Si tu infra aún anda en Node 18 o 16, toca actualizar.
    • APIs antiguas eliminadas: configuraciones viejas en vite.config.js que funcionaban por “gracia” ahora fallan.
    • Cambios en el manejo de CSS asíncrono: menos FOUC, sí, pero puede requerir retoques en proyectos veteranos.
    • Plugins de Rollup: algunos necesitan actualización para funcionar con Rolldown.

    Si actualizas sin plan, te vas a topar con builds rotos y deploys empantanados. Si actualizas con plan, reduces tiempo y costos.

    Guía práctica de migración (hazlo en staging)

    No te doy una lista teórica. Haz esto:

    Pasos

    • Crea un branch vite8
    • Actualiza Node a 20 en tu CI y en tu entorno local (usa nvm o containers)
    • Actualiza Vite a 8.0 en package.json
    • Corre npm/yarn/pnpm install
    • Ejecuta los tests unitarios — corrige lo que rompa
    • Lanza el build en CI con caché limpio — observa memoria y tiempos
    • Revisa plugins: si alguno falla, busca alternativas o parchea
    • Test E2E en staging: presta atención a SSR y CSS
    • Repite hasta que el staging sea indistinguible de local

    Qué probar prioritario

    • End-to-End completo (navegación, login, SSR)
    • HMR en grandes cambios
    • Picos de concurrencia en staging (la memoria importa)
    • Integración con providers (Cloudflare, Deno Deploy, etc.)

    Cuándo y cuándo no deberías actualizar

    Actualiza ya si:

    • Estás iniciando un proyecto nuevo.
    • Tienes micro-frontends o monorepo.
    • Dependes de despliegues Edge o quieres reproducibilidad del entorno.

    Espera si:

    • Tienes plugins Rollup críticos sin mantenimiento.
    • Corres sobre infra legacy con Node antiguo y no puedes actualizar.
    • Tu ciclo de deploy es sensible y no puedes permitir riesgo sin staging.

    Metáforas porque te ayudan a decidir

    Piensa en tu build como un ensayo general antes del estreno. Antes, tenías dos directores de orquesta que interpretaban la partitura de forma distinta. Ahora tienes un único director (Rolldown). La banda suena más igual del ensayo al teatro. Menos desafines a mitad de obra.

    Rolldown es una navaja suiza… pero hecha con precisión alemana. No es todo trucos, es ingeniería.

    Riesgos reales y cómo mitigarlos

    • Plugins rotos: revisa la lista de dependencias que toquen rollup internamente. Busca forks o actualizaciones.
    • Dependencias nativas: algunos paquetes que usan internals de Node pueden fallar en entornos Edge. Usa la Environment API para detectarlo temprano.
    • Falta de pruebas E2E: si no tienes E2E, monta uno mínimo. Te va a ahorrar noches.

    Checklist rápido para Tech Leads (lo que debes exigir al equipo)

    • Branch vite8 con CI apuntando a Node 20.
    • Suite E2E que cubra SSR y CSS crítico.
    • Lista de plugins críticos y plan B (sustituir o parchear).
    • Métricas antes y después de build en CI (tiempo y memoria).
    • Fecha de congelación para rollback si algo va mal.

    Una nota que nadie te dirá gratis

    La adopción global de Rolldown no es instantánea. La comunidad tiene miles de paquetes; algunos cambiarán rápido, otros tardarán. Esto crea una ventana donde conviene probar, pero no empujar a producción sin staging. Dicho de otra forma: hay oportunidad para mejorar, y también hay riesgo operativo. El punto es medir, no apostar.

    ¿Y ahora qué hago?

    No te quedes en la charla. Haz algo práctico hoy:

    • Crea un branch llamado vite8.
    • Actualiza Node en tu CI a 20 y ejecuta un build.
    • Mide: tiempos de build, memoria y resultados E2E.
    • Si algo falla, abre issues en los repos de plugins y prioriza parches.

    Haz clic aquí: empieza un branch vite8 y corre el build. (Sí, esto es un CTA literal: abre tu repositorio y empieza la migración en staging.)

    Cierre — lo que queda por ver

    Vite 8.0 no es sólo sobre velocidad. Es sobre coherencia. Sobre dejar de confiar en “funciona en mi máquina” como mantra espiritual. Es la lucha por que desarrollo y producción hablen el mismo idioma.

    ¿Significa que todo se arregló? No. Significa que el terreno se niveló. El siguiente paso será ver cómo la comunidad actualiza plugins y adopta la Environment API para entornos Edge. Eso va a marcar la diferencia real en proyectos a gran escala.

    Esto no acaba aquí. Si migras y compartes métricas, la comunidad gana. Si detectas un plugin roto y lo documentas, le salvas la noche a otro equipo. Y si te quedas inmóvil, alguien más lo hará por ti y te tocará adoptar lo que ya sea estándar.

    ¿Quieres que te pase una checklist automática para tu repo? Respóndeme con “VITE8” y te mando un script de migración básico que puedes correr en 5 minutos. No prometo magia, pero sí menos berrinches en deploy.

    Fin… por ahora.

    FAQ

    ¿Qué es Rolldown y por qué importa?

    Rolldown es el bundler en Rust que Vite 8 introduce para unificar comportamiento entre desarrollo y producción. Importa porque reduce discrepancias fruto de usar motores diferentes (esbuild vs Rollup), mejorando consistencia, tiempos de build y uso de memoria.

    ¿Qué requiere mi infraestructura para actualizar a Vite 8.0?

    Requiere Node.js 20+ en CI y entornos locales. También revisar y posiblemente actualizar configuraciones antiguas en vite.config.js y validar plugins de Rollup.

    ¿Cómo prevengo que plugins de Rollup rompan mi build?

    Identifica plugins críticos, prueba en un branch vite8 en staging, busca forks o alternativas y prioriza parches antes de mover a producción.

    ¿Qué pruebas debo priorizar antes de desplegar?

    End-to-End completo (navegación, login, SSR), pruebas de HMR en cambios grandes, pruebas de concurrencia en staging y validación con providers como Cloudflare o Deno Deploy.

    ¿Por qué usar la Environment API?

    Porque permite simular las restricciones del runtime final (Edge, Deno, Bun, etc.) durante el desarrollo, evitando sorpresas por APIs no soportadas y reduciendo mocks improvisados.

    ¿Debo actualizar ahora si tengo un proyecto en producción estable?

    No necesariamente. Actualiza si puedes dedicar tiempo en staging y revisar plugins. Espera si dependes de plugins sin mantenimiento o de infra con Node antiguo.