Lanzamiento de Vite 6 - Environment API y Optimizacion de Build de Proxima Generacion

2025.12.02

Descripcion General de Vite 6

Vite 6 es un nuevo hito en las herramientas de build frontend. Con la introduccion del Environment API, ahora es posible manejar de manera unificada diferentes entornos de ejecucion como SSR, cliente y workers.

flowchart TB
    subgraph Vite6["Arquitectura de Vite 6"]
        subgraph EnvAPI["Environment API (Nuevo)"]
            Client["Client<br/>Environment"]
            SSR["SSR<br/>Environment"]
            Worker["Worker<br/>Environment"]
        end

        ModuleGraph["Module Graph<br/>Gestiona grafos de modulos independientes para cada entorno"]

        subgraph Bundlers["Bundlers"]
            esbuild["esbuild<br/>(dev)"]
            Rollup["Rollup<br/>(build)"]
            Rolldown["Rolldown<br/>(futuro)"]
        end

        EnvAPI --> ModuleGraph
        ModuleGraph --> esbuild
        ModuleGraph --> Rollup
        ModuleGraph --> Rolldown
    end

Environment API

El cambio mas importante en Vite 6 es la introduccion del Environment API.

Enfoque Anterior vs Nuevo Enfoque

// Vite 5 y anteriores: SSR como caso especial
export default defineConfig({
  ssr: {
    noExternal: ['some-package'],
    target: 'node',
  },
});

// Vite 6: Gestion unificada con Environment API
export default defineConfig({
  environments: {
    client: {
      // Configuracion especifica del cliente
      build: {
        outDir: 'dist/client',
        rollupOptions: {
          input: 'src/entry-client.ts',
        },
      },
    },
    ssr: {
      // Configuracion especifica de SSR
      build: {
        outDir: 'dist/server',
        rollupOptions: {
          input: 'src/entry-server.ts',
        },
      },
      resolve: {
        noExternal: ['some-package'],
      },
    },
    worker: {
      // Configuracion especifica de Web Worker
      build: {
        outDir: 'dist/worker',
      },
    },
  },
});

Creacion de Entornos Personalizados

// vite.config.ts
import { defineConfig, createEnvironment } from 'vite';

export default defineConfig({
  environments: {
    // Entornos personalizados como Edge Runtime
    edge: createEnvironment({
      name: 'edge',
      consumer: 'server',
      webCompatible: true,
      build: {
        outDir: 'dist/edge',
        target: 'esnext',
        rollupOptions: {
          external: ['node:*'],
        },
      },
      resolve: {
        conditions: ['edge-light', 'worker', 'import', 'module'],
      },
    }),
  },
});

Soporte de Entornos en Plugins

// Plugin personalizado
function myPlugin(): Plugin {
  return {
    name: 'my-plugin',

    // Procesamiento diferente por entorno
    transform(code, id, options) {
      const environment = this.environment;

      if (environment.name === 'ssr') {
        // Transformacion especifica de SSR
        return transformForSSR(code);
      }

      if (environment.name === 'client') {
        // Transformacion especifica del cliente
        return transformForClient(code);
      }

      return code;
    },

    // Cuando se inicializa el entorno
    configureEnvironment(environment) {
      console.log(`Configurando entorno: ${environment.name}`);
    },

    // Hot update
    hotUpdate({ environment, modules }) {
      if (environment.name === 'client') {
        // HMR solo para cliente
        return modules;
      }
      // SSR requiere reinicio
      return [];
    },
  };
}

Mejoras de Rendimiento

Comparacion de Rendimiento

ElementoVite 5.4Vite 6.0Mejora
Tiempo de inicio del servidor de desarrollo (proyecto grande)800ms680ms15% mas rapido
Tiempo de actualizacion HMR40ms30ms25% mas rapido
Tiempo de build (1000 modulos)10.2s9.1s11% mas rapido
Uso de memoria320MB280MB13% reduccion

Configuracion de Optimizacion

// vite.config.ts
export default defineConfig({
  // Optimizacion de pre-bundling de dependencias
  optimizeDeps: {
    include: ['lodash-es', 'react', 'react-dom'],
    exclude: ['your-local-package'],

    // Optimizacion de multiples puntos de entrada
    entries: ['src/main.tsx', 'src/worker.ts'],

    // Opciones de esbuild
    esbuildOptions: {
      target: 'esnext',
      supported: {
        'top-level-await': true,
      },
    },
  },

  // Optimizacion de build
  build: {
    // Target
    target: 'esnext',

    // Estrategia de division de chunks
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
          utils: ['lodash-es', 'date-fns'],
        },
      },
    },

    // Division de codigo CSS
    cssCodeSplit: true,

    // Source maps
    sourcemap: 'hidden',

    // Compresion
    minify: 'esbuild',
  },
});

Mejoras de CSS

Integracion Mejorada con Lightning CSS

// vite.config.ts
export default defineConfig({
  css: {
    // Usar Lightning CSS por defecto
    transformer: 'lightningcss',

    lightningcss: {
      // Navegadores objetivo
      targets: {
        chrome: 100,
        firefox: 100,
        safari: 15,
      },

      // Modulos CSS
      cssModules: {
        pattern: '[hash]_[local]',
      },

      // Feature flags
      drafts: {
        customMedia: true,
      },
    },
  },
});

Generacion de Tipos para CSS Modules

// vite.config.ts
export default defineConfig({
  css: {
    modules: {
      // Generacion automatica de archivos de definicion de tipos
      localsConvention: 'camelCaseOnly',
      generateScopedName: '[name]__[local]___[hash:base64:5]',
    },
  },

  plugins: [
    // Plugin de generacion de tipos para CSS Modules
    cssModulesTyped(),
  ],
});
/* styles.module.css */
.button {
  background: blue;
}

.buttonPrimary {
  composes: button;
  background: green;
}
// styles.module.css.d.ts (generado automaticamente)
declare const styles: {
  readonly button: string;
  readonly buttonPrimary: string;
};
export default styles;

Nuevas Opciones de Configuracion

Mejoras en Configuracion de JSON

// vite.config.ts
export default defineConfig({
  json: {
    // Habilitar exportaciones con nombre
    namedExports: true,

    // Convertir JSON a modulo ES
    stringify: false,
  },
});
// Ejemplo de uso
import { version, name } from './package.json';
console.log(`${name}@${version}`);

Mejoras en Importacion Glob

// Patrones de importacion dinamica
const modules = import.meta.glob('./modules/*.ts', {
  // Importacion inmediata
  eager: true,

  // Solo exportaciones especificas
  import: 'default',

  // Parametros de query
  query: { raw: true },
});

// Importacion glob con seguridad de tipos
const pages = import.meta.glob<{
  default: React.ComponentType;
  meta: { title: string };
}>('./pages/**/*.tsx');

Manejo de Cambios Incompatibles

Version Minima de Node.js

// package.json
{
  "engines": {
    "node": ">=18.0.0"
  }
}

Deprecacion de CJS Node API

// Vite 5 y anteriores: CJS tambien soportado
const { createServer } = require('vite');

// Vite 6: Solo ESM
import { createServer } from 'vite';

Script de Migracion

# Migracion automatica
npx vite-migrate@latest

# Verificacion manual
npx vite --version

Preparacion para Integracion con Rolldown

Vite 6 esta preparando las bases para la futura integracion con Rolldown.

flowchart TB
    subgraph Current["Actual (Vite 6)"]
        esbuild_cur["esbuild<br/>(dev)"]
        Rollup_cur["Rollup<br/>(build)"]
    end

    subgraph Future["Futuro (Vite 7+)"]
        Rolldown["Rolldown (Rust)<br/>• Velocidad de esbuild<br/>• Compatibilidad de Rollup<br/>• Pipeline de build unificado"]
    end

    Current --> Future

Efectos esperados:

  • Mejora en consistencia dev/produccion
  • Mejora de velocidad de build 3-5x
  • Reduccion del uso de memoria

Compatibilidad con Frameworks

React + Vite 6

// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [
    react({
      // Compatibilidad con React Compiler
      babel: {
        plugins: [['babel-plugin-react-compiler', {}]],
      },
    }),
  ],
  environments: {
    client: {
      build: {
        target: 'esnext',
      },
    },
  },
});

Vue + Vite 6

// vite.config.ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
  plugins: [vue()],
  environments: {
    client: {
      resolve: {
        alias: {
          '@': '/src',
        },
      },
    },
  },
});

Enlaces de Referencia

← Volver a la lista