Loading...
Loading...
React and Vite performance optimization guidelines. Use when writing, reviewing, or optimizing React components built with Vite. Triggers on tasks involving Vite configuration, build optimization, code splitting, lazy loading, HMR, bundle size, or React performance.
npx skill4agent add asyrafhussin/agent-skills react-vite-best-practices| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Build Optimization | CRITICAL | |
| 2 | Code Splitting | CRITICAL | |
| 3 | Development Performance | HIGH | |
| 4 | Asset Handling | HIGH | |
| 5 | Environment Config | MEDIUM | |
| 6 | HMR Optimization | MEDIUM | |
| 7 | Bundle Analysis | LOW-MEDIUM | |
| 8 | Advanced Patterns | LOW | |
build-manual-chunksbuild-minify-terserbuild-target-modernbuild-sourcemap-productionbuild-output-structurebuild-chunk-size-limitsplit-route-lazysplit-suspense-boundariessplit-dynamic-importssplit-preload-criticalsplit-named-chunkssplit-vendor-separationdev-dependency-prebundlingdev-exclude-large-depsdev-warmup-frequentdev-server-configdev-hmr-overlayasset-inline-limitasset-public-dirasset-import-syntaxasset-svg-componentsasset-image-optimizationasset-font-loadingenv-vite-prefixenv-type-definitionsenv-mode-specificenv-sensitive-dataenv-build-timehmr-fast-refreshhmr-preserve-statehmr-boundary-setuphmr-custom-handlersbundle-visualizerbundle-analyze-depsbundle-tree-shakingbundle-dead-codebundle-css-splittingadvanced-ssr-configadvanced-library-modeadvanced-multi-pageadvanced-worker-threadsadvanced-wasmimport { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
build: {
target: 'esnext',
minify: 'terser',
sourcemap: false,
chunkSizeWarningLimit: 500,
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
},
},
},
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
},
optimizeDeps: {
include: ['react', 'react-dom'],
},
server: {
port: 3000,
open: true,
hmr: {
overlay: true,
},
},
})import { lazy, Suspense } from 'react'
import { BrowserRouter, Routes, Route } from 'react-router-dom'
// Lazy load route components
const Home = lazy(() => import('./pages/Home'))
const Dashboard = lazy(() => import('./pages/Dashboard'))
const Settings = lazy(() => import('./pages/Settings'))
// Named chunks for better debugging
const Profile = lazy(() =>
import(/* webpackChunkName: "profile" */ './pages/Profile')
)
function App() {
return (
<BrowserRouter>
<Suspense fallback={<LoadingSpinner />}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/settings" element={<Settings />} />
<Route path="/profile" element={<Profile />} />
</Routes>
</Suspense>
</BrowserRouter>
)
}// src/vite-env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string
readonly VITE_APP_TITLE: string
readonly VITE_ENABLE_ANALYTICS: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}// Usage
const apiUrl = import.meta.env.VITE_API_URL
const isDev = import.meta.env.DEV
const isProd = import.meta.env.PRODrules/build-manual-chunks.md
rules/split-route-lazy.md
rules/_sections.md