
Vite Patterns
Configure Vite dev server, production builds, plugins, and env/proxy setup without guessing Rolldown vs Rollup behavior.
Install
npx skills add https://github.com/affaan-m/ecc --skill vite-patternsWhat is this skill?
- Covers Vite 8+ dev (native ESM) vs production Rolldown/Rollup bundling
- Environment variables, `.env` files, and dev-server API proxy patterns
- Dependency pre-bundling, CJS/ESM interop, and `node_modules/.vite` cache troubleshooting
- Build optimization: code-splitting, minification (Oxc), and `build.lib` library mode
- Unified plugin ordering and debugging for HMR and build failures
Adoption & trust: 315 installs on skills.sh; 211k GitHub stars.
Recommended Skills
Frontend Designanthropics/skills
Vercel React Best Practicesvercel-labs/agent-skills
Remotion Best Practicesremotion-dev/skills
Vercel Composition Patternsvercel-labs/agent-skills
Develop Userscriptsxixu-me/skills
Next Best Practicesvercel-labs/next-skills
Journey fit
SKILL.md
READMESKILL.md - Vite Patterns
# Vite Patterns Build tool and dev server patterns for Vite 8+ projects. Covers configuration, environment variables, proxy setup, library mode, dependency pre-bundling, and common production pitfalls. ## When to Use - Configuring `vite.config.ts` or `vite.config.js` - Setting up environment variables or `.env` files - Configuring dev server proxy for API backends - Optimizing build output (chunks, minification, assets) - Publishing libraries with `build.lib` - Troubleshooting dependency pre-bundling or CJS/ESM interop - Debugging HMR, dev server, or build errors - Choosing or ordering Vite plugins ## How It Works - **Dev mode** serves source files as native ESM — no bundling. Transforms happen on-demand per module request, which is why cold starts are fast and HMR is precise. - **Build mode** uses Rolldown (v7+) or Rollup (v5–v6) to bundle the app for production with tree-shaking, code-splitting, and Oxc-based minification. - **Dependency pre-bundling** converts CJS/UMD deps to ESM once via esbuild and caches the result under `node_modules/.vite`, so subsequent starts skip the work. - **Plugins** share a unified interface across dev and build — the same plugin object works for both the dev server's on-demand transforms and the production pipeline. - **Environment variables** are statically inlined at build time. `VITE_`-prefixed vars become public constants in the bundle; everything unprefixed is invisible to client code. ## Examples ### Config Structure #### Basic Config ```typescript // vite.config.ts import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig({ plugins: [react()], resolve: { alias: { '@': new URL('./src', import.meta.url).pathname }, }, }) ``` #### Conditional Config ```typescript // vite.config.ts import { defineConfig, loadEnv } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig(({ command, mode }) => { const env = loadEnv(mode, process.cwd()) // VITE_ prefixed only (safe) return { plugins: [react()], server: command === 'serve' ? { port: 3000 } : undefined, define: { __API_URL__: JSON.stringify(env.VITE_API_URL), }, } }) ``` #### Key Config Options | Key | Default | Description | |-----|---------|-------------| | `root` | `'.'` | Project root (where `index.html` lives) | | `base` | `'/'` | Public base path for deployed assets | | `envPrefix` | `'VITE_'` | Prefix for client-exposed env vars | | `build.outDir` | `'dist'` | Output directory | | `build.minify` | `'oxc'` | Minifier (`'oxc'`, `'terser'`, or `false`) | | `build.sourcemap` | `false` | `true`, `'inline'`, or `'hidden'` | ### Plugins #### Essential Plugins Most plugin needs are covered by a handful of well-maintained packages. Reach for these before writing your own. | Plugin | Purpose | When to use | |--------|---------|-------------| | `@vitejs/plugin-react-swc` | React HMR + Fast Refresh via SWC | Default for React apps (faster than Babel variant) | | `@vitejs/plugin-react` | React HMR + Fast Refresh via Babel | Only if you need Babel plugins (emotion, MobX decorators) | | `@vitejs/plugin-vue` | Vue 3 SFC support | Vue apps | | `vite-plugin-checker` | Runs `tsc` + ESLint in worker thread with HMR overlay | **Any TypeScript app** — Vite does NOT type-check during `vite build` | | `vite-tsconfig-paths` | Honors `tsconfig.json` `paths` aliases | Any time you already have aliases in `tsconfig.json` | | `vite-plugin-dts` | Emits `.d.ts` files in library mode | Publishing TypeScript libraries | | `vite-plugin-svgr` | Imports SVGs as React components | React apps using SVGs as components | | `rollup-plugin-visualizer` | Bundle treemap/