Volver al blog

Vite vs Webpack en 2025: La Batalla de las Build Tools Modernas

Hola HaWkers, la guerra de las build tools JavaScript llegó a un punto decisivo. Vite, creado por Evan You (creador de Vue), revolucionó el mercado con un enfoque radicalmente diferente: ¿por qué bundlear todo durante el desarrollo si los navegadores modernos soportan módulos ES nativamente?

¿Todavía esperas minutos para que tu dev server inicie? En 2025, eso es inaceptable.

El Problema que Vite Resolvió

Webpack dominó por años, pero tiene un problema fundamental: necesita procesar todo el proyecto antes de iniciar el dev server. En proyectos grandes, eso significa minutos de espera.

El Enfoque Tradicional (Webpack):

  1. Lee todos los archivos
  2. Resuelve dependencias
  3. Crea bundle completo
  4. Inicia servidor
  5. Cualquier cambio = rebuild parcial (aún así lento)

El Enfoque de Vite:

  1. Inicia servidor inmediatamente
  2. Sirve módulos ES nativos bajo demanda
  3. Pre-bundlea solo dependencias (node_modules) con esbuild
  4. Cambios = actualización instantánea (HMR real)
// vite.config.js - Configuración moderna
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { resolve } from 'path';

export default defineConfig({
  plugins: [
    react({
      // Fast Refresh habilitado por defecto
      fastRefresh: true
    })
  ],

  resolve: {
    alias: {
      '@': resolve(__dirname, './src'),
      '@components': resolve(__dirname, './src/components'),
      '@utils': resolve(__dirname, './src/utils')
    }
  },

  // Dev server optimizado
  server: {
    port: 3000,
    open: true,
    // Proxy para API
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  },

  // Build de producción
  build: {
    // Usa Rollup bajo el capó
    rollupOptions: {
      output: {
        // Code splitting automático
        manualChunks: {
          vendor: ['react', 'react-dom'],
          utils: ['lodash', 'date-fns']
        }
      }
    },
    // Optimizaciones
    minify: 'terser',
    sourcemap: true,
    // Target moderno por defecto
    target: 'esnext'
  },

  // Optimización de dependencias
  optimizeDeps: {
    include: ['react', 'react-dom', 'axios'],
    exclude: ['some-native-module']
  }
});

La diferencia de velocidad es dramática:

Métrica Webpack Vite
Cold Start 30-60s 300ms
HMR 1-3s <100ms
Build Prod 45s 15s

Webpack: Aún Relevante

Webpack no murió. Para casos específicos, sigue siendo la mejor elección:

Usa Webpack cuando:

  • Proyecto legacy con configuración compleja existente
  • Necesitas Module Federation (microfrontends)
  • Requisitos de compatibilidad con navegadores antiguos
  • Plugins específicos de Webpack sin equivalente en Vite
// webpack.config.js - Configuración moderna optimizada
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'production',

  entry: {
    main: './src/index.js',
    vendor: ['react', 'react-dom']
  },

  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[contenthash].js',
    clean: true
  },

  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chunks: 'all'
        }
      }
    },
    // Persistent caching
    moduleIds: 'deterministic'
  },

  cache: {
    // Cache en filesystem para rebuilds más rápidos
    type: 'filesystem',
    buildDependencies: {
      config: [__filename]
    }
  },

  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            cacheDirectory: true // Cache de Babel
          }
        }
      }
    ]
  },

  plugins: [
    new HtmlWebpackPlugin({
      template: './public/index.html'
    }),
    new MiniCssExtractPlugin()
  ]
};

Migrando de Webpack a Vite

La migración es más simple de lo que parece:

// 1. Instalar Vite
// npm install vite @vitejs/plugin-react --save-dev

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

export default defineConfig({
  plugins: [react()],
  // La mayoría de las configuraciones Webpack tienen equivalentes
});

// 3. Actualizar package.json
{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  }
}

// 4. Mover index.html a la raíz del proyecto
// Vite usa el HTML como punto de entrada

El Ecosistema en 2025

Vite lidera:

  • SvelteKit usa Vite nativamente
  • Nuxt 3 usa Vite por defecto
  • Astro usa Vite
  • Next.js tiene soporte experimental con Turbopack (similar a Vite)

Webpack permanece fuerte en:

  • Proyectos enterprise legacy
  • Create React App (aunque en declive)
  • Angular CLI (aunque migrando)

Si quieres entender cómo build tools se relacionan con monorepos, lee: Monorepos con Nx y Turborepo.

¡Vamos a por ello! 🦅

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios