Skip to content

Mayo 9, 2024

Conferencia Vite SF

Migración desde v2

Compatibilidad de Node.js

Vite ya no es compatible con Node.js 12 / 13 / 15, los cuales ya se finalizó sus soportes oficiales. Ahora se requiere Node.js 14.18+ / 16+.

Principales cambios para navegadores modernos

El paquete de producción asume soporte para JavaScript moderno. De forma predeterminada, Vite apunta a navegadores que admiten los módulos ES nativos e importación dinámica nativa de ESM e import.meta:

  • Chrome >=87
  • Firefox >=78
  • Safari >=13
  • Edge >=88

Una pequeña fracción de usuarios ahora requerirán el uso de @vitejs/plugin-legacy, que generará automáticamente fragmentos heredados y el correspondiente polyfills de características de lenguaje ES.

Cambios en las opciones de configuración

Se han eliminado las siguientes opciones que ya estaban en desuso en v2:

Cambios de Arquitectura y Opciones Heredadas

Esta sección describe los mayores cambios de arquitectura en Vite v3. Para permitir que los proyectos migren desde v2 en caso de un problema de compatibilidad, se agregaron opciones heredadas para volver a las estrategias de Vite v2.

Cambios en el servidor de desarrollo

El puerto del servidor de desarrollo predeterminado de Vite ahora es 5173. Puedes usar server.port para configurarlo en 3000.

El host del servidor de desarrollo predeterminado de Vite ahora es localhost. En Vite v2, Vite escuchaba 127.0.0.1 de forma predeterminada. Node.js bajo v17 normalmente resuelve localhost como 127.0.0.1, por lo que para esas versiones, el host no cambiará. Para Node.js 17+, puedes usar server.host para configurarlo en 127.0.0.1 y mantener el mismo host que Vite v2 .

Ten en cuenta que Vite v3 ahora imprime el host correcto. Esto significa que Vite puede imprimir 127.0.0.1 como host de escucha cuando se usa localhost. Puedes configurar dns.setDefaultResultOrder('verbatim') para evitar esto. Consulta server.host para obtener más detalles.

Cambios en SSR

Vite v3 usa ESM para la compilación de SSR de manera predeterminada. Cuando se usa ESM, ya no se necesitan las heurísticas de externalización de SSR. De forma predeterminada, todas las dependencias se externalizan. Puedes usar ssr.noExternal para controlar qué dependencias incluir en el paquete SSR.

Si no es posible usar ESM para SSR en tu proyecto, puedes configurar legacy.buildSsrCjsExternalHeuristics para generar un paquete CJS utilizando la misma estrategia de externalización de Vite v2.

Además, build.rollupOptions.output.inlineDynamicImports ahora tiene el valor predeterminado false cuando ssr.target es 'node'. inlineDynamicImports cambia el orden de ejecución y no es necesario empaquetar en un solo archivo para compilaciones de node.

Cambios generales

  • Las extensiones de archivo JS en modo SSR y lib ahora usan una extensión válida (js, mjs o cjs) para generar archivos y fragmentos JS según su formato y el tipo de paquete.

  • Terser ahora es una dependencia opcional. Si estás utilizando build.minify: 'terser', debes instalarlo.

    shell
    npm add -D terser

import.meta.glob

  • Raw import.meta.glob cambió de {afirm: { type: 'raw' }} a { as: 'raw' }

  • Las claves de import.meta.glob ahora son relativas al módulo actual.

diff
  // archivo: /foo/index.js
  const modules = import.meta.glob('../foo/*.js')
  // transformado:
  const modules = {
  -  '../foo/bar.js': () => {}
  +  './bar.js': () => {}
  }
  • Al usar un alias con import.meta.glob, las claves siempre son absolutas.
  • import.meta.globEager ahora está en desuso. Utiliza import.meta.glob('*', { eager: true }) en su lugar.

Compatibilidad de WebAssembly

La sintaxis import init from 'example.wasm' se descarta para evitar futuras colisiones con "Integración ESM para Wasm". Puedes usar ?init, que es similar al comportamiento anterior.

diff
-import init from 'example.wasm'
+import init from 'example.wasm?init'
-init().then((exports) => {
+init().then(({ exports }) => {
  exports.test()
})

Generación Automática de Certificados https

Se necesita un certificado válido cuando se usa https. En Vite v2, si no se configuraba ningún certificado, se creaba y almacenaba automáticamente un certificado autofirmado. Desde Vite v3, recomendamos crear manualmente tus certificados. Si aún deseas utilizar la generación automática de la v2, esta función se puede volver a habilitar agregando @vitejs/plugin-basic-ssl a los complementos del proyecto.

js
import basicSsl from '@vitejs/plugin-basic-ssl'
export default {
  plugins: [basicSsl()],
}

Experimental

Uso de optimización de dependencias de esbuild en compilación

En la v3, Vite permite el uso de esbuild para optimizar las dependencias de forma predeterminada. Al hacerlo, elimina una de las diferencias más significativas entre desarrollo y producción presentes en la v2. Debido a que esbuild convierte las dependencias de solo CJS a ESM, @rollup/plugin-commonjs ya no se usa.

Si deseas probar esta estrategia de compilación, puedes usar optimizeDeps.disabled: false (el valor predeterminado en la v3 es disabled: 'build'). @rollup/plugin-commonjs se puede eliminar pasando build.commonjsOptions: { include: [] }

Avanzado

Hay algunos cambios que solo afectan a los creadores de complementos/herramientas.

También hay otros cambios importantes que solo afectan a unos pocos usuarios.

Migración desde v1

Consulta la Guía de migración desde v1 en la documentación de Vite v2 primero para ver los cambios necesarios para migrar tu aplicación a Vite v2 y luego continuar con los cambios descritos en esta página.

Publicado bajo licencia MIT. (e7e3ba79)