正在加载,请稍候…

Vite Build Tool: Configuration and Performance Optimization

Optimize Vite configuration for faster development and production builds. Learn code splitting, chunking strategies, plugins, and performance tuning.

Vite Build Tool: Configuration and Performance Optimization

Vite uses native ES modules in development and Rollup for production builds.

Basic Configuration

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

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@components': path.resolve(__dirname, './src/components'),
    },
  },
  server: {
    port: 3000,
    open: true,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^/api/, ''),
      },
    },
  },
});

Build Optimization

export default defineConfig({
  build: {
    // Chunk size warning threshold
    chunkSizeWarningLimit: 1000,

    // Rollup options for code splitting
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
          router: ['react-router-dom'],
          ui: ['@mui/material', '@emotion/react'],
        },
        // Dynamic chunk naming
        chunkFileNames: 'assets/[name]-[hash].js',
        entryFileNames: 'assets/[name]-[hash].js',
        assetFileNames: 'assets/[name]-[hash].[ext]',
      },
    },

    // Minify options
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },

    // Source maps
    sourcemap: false,

    // Target modern browsers
    target: 'es2020',
  },
});

Environment Variables

// vite.config.ts
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), '');
  return {
    define: {
      __APP_VERSION__: JSON.stringify(env.npm_package_version),
    },
  };
});
# .env.development
VITE_API_URL=http://localhost:8080
VITE_DEBUG=true

# .env.production
VITE_API_URL=https://api.myapp.com
VITE_DEBUG=false
// Usage in code
const apiUrl = import.meta.env.VITE_API_URL;

Performance Plugins

import { visualizer } from 'rollup-plugin-visualizer';
import viteCompression from 'vite-plugin-compression';
import { splitVendorChunkPlugin } from 'vite';

export default defineConfig({
  plugins: [
    react(),
    splitVendorChunkPlugin(),
    viteCompression({ algorithm: 'gzip' }),
    visualizer({
      filename: 'dist/stats.html',
      open: true,
      gzipSize: true,
    }),
  ],
});

SSR Configuration

export default defineConfig({
  ssr: {
    noExternal: ['@some/package'],
    external: ['fs', 'path'],
  },
});

Dev Server Performance

export default defineConfig({
  optimizeDeps: {
    include: ['react', 'react-dom', 'lodash-es'],
    exclude: ['@local/package'],
    esbuildOptions: {
      target: 'es2020',
    },
  },
  server: {
    warmup: {
      clientFiles: ['./src/components/*.tsx'],
    },
  },
});

Proper Vite configuration can reduce build times by 10x compared to Webpack.