Vite Configuration Reference

Type: Software Reference Confidence: 0.93 Sources: 7 Verified: 2026-02-28 Freshness: 2026-02-28

TL;DR

Constraints

Quick Reference

OptionDefaultPurpose
rootprocess.cwd()Project root directory
base"/"Public base path
plugins[]Framework adapters
resolve.alias{}Path alias mapping
server.port5173Dev server port
server.proxy{}API proxy (dev only)
build.outDir"dist"Output directory
build.target"modules"Browser target
build.sourcemapfalseSource maps
build.rollupOptions{}Advanced Rollup config
envPrefix"VITE_"Client-exposed env var prefix

Decision Tree

START
├── React? → @vitejs/plugin-react-swc (faster)
├── Vue? → @vitejs/plugin-vue
├── Svelte? → @sveltejs/vite-plugin-svelte
├── Library? → build.lib + rollupOptions.external
├── Need SSR? → build.ssr + server middleware
├── Need API proxy? → server.proxy
└── DEFAULT → defineConfig + resolve.alias + build defaults

Step-by-Step Guide

1. Create vite.config.ts

[src1]

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';

export default defineConfig({
  plugins: [react()],
});

2. Configure path aliases

[src1]

import path from 'node:path';
export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
});

3. Set up dev server proxy

[src2]

export default defineConfig({
  server: {
    port: 3000,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
      },
    },
  },
});

4. Configure production build

[src3]

export default defineConfig({
  build: {
    target: 'es2022',
    sourcemap: true,
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
        },
      },
    },
  },
});

Code Examples

Complete React + TypeScript Config

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';
import tsconfigPaths from 'vite-tsconfig-paths';

export default defineConfig({
  plugins: [react(), tsconfigPaths()],
  server: {
    port: 3000,
    strictPort: true,
    proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } },
  },
  build: {
    target: 'es2022',
    sourcemap: true,
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            if (id.includes('react')) return 'vendor-react';
            return 'vendor';
          }
        },
      },
    },
  },
});

Library Mode Config

import { defineConfig } from 'vite';
import { resolve } from 'node:path';
import dts from 'vite-plugin-dts';

export default defineConfig({
  plugins: [dts({ rollupTypes: true })],
  build: {
    lib: {
      entry: resolve(__dirname, 'src/index.ts'),
      name: 'MyLib',
      formats: ['es', 'cjs'],
    },
    rollupOptions: {
      external: ['react', 'react-dom'],
    },
  },
});

Anti-Patterns

Wrong: Expecting server.proxy in production

// ❌ BAD — proxy only works in dev
export default defineConfig({
  server: { proxy: { '/api': 'http://api:8080' } },
  // Production: proxy is gone!

Correct: Use env variables for production API URLs

// ✅ GOOD — production reads VITE_API_URL
// const API = import.meta.env.VITE_API_URL || '/api';

Wrong: Not using defineConfig

// ❌ BAD — no type safety
export default { sever: { port: 3000 } }; // Typo not caught!

Correct: Always use defineConfig

// ✅ GOOD — typos caught at type-check
import { defineConfig } from 'vite';
export default defineConfig({ server: { port: 3000 } });

Wrong: Exposing secrets via VITE_ prefix

# ❌ BAD — bundled into client JS, visible to anyone
VITE_DATABASE_URL=postgresql://user:password@host/db

Correct: Only prefix public values

# ✅ GOOD — secrets stay server-only
VITE_API_URL=https://api.example.com
DATABASE_URL=postgresql://...

Common Pitfalls

Diagnostic Commands

# Check Vite version
npx vite --version

# Start with debug logging
npx vite --debug

# Preview production build
npx vite preview

# Force dependency optimization
npx vite optimize --force

Version History & Compatibility

VersionStatusBreaking ChangesMigration Notes
Vite 6.xCurrentEnvironment API (experimental)Most configs work unchanged from v5
Vite 5.xMaintenanceRollup 4, Node 18+Update Rollup plugins
Vite 4.xEOLSWC React pluginUpgrade to v5+

When to Use / When Not to Use

Use WhenDon't Use WhenUse Instead
New React/Vue/Svelte appsNext.js / Nuxt projectsFramework CLI
Need fast dev serverVery old browsers (IE11)webpack 5
Library bundlingServer-only Node.js projecttsc or esbuild

Important Caveats

Related Units