ideabrowser.com — find trending startup ideas with real demand
Try itnpx skills add https://github.com/asyrafhussin/agent-skills --skill react-vite-best-practicesComprehensive performance optimization guide for React applications built with Vite. Contains 23 rules across 6 categories for build optimization, code splitting, development performance, asset handling, environment configuration, and bundle analysis.
Reference these guidelines when:
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Build Optimization | CRITICAL | build- |
| 2 | Code Splitting | CRITICAL | split- |
| 3 | Development | HIGH | dev- |
| 4 | Asset Handling | HIGH | asset- |
| 5 | Environment Config | MEDIUM | env- |
| 6 | Bundle Analysis | MEDIUM | bundle- |
build-manual-chunks - Configure manual chunks for vendor separationbuild-minification - Minification with OXC (default) or Terserbuild-target-modern - Target modern browsers (baseline-widely-available)build-sourcemaps - Configure sourcemaps per environmentbuild-tree-shaking - Ensure proper tree shaking with ESMbuild-compression - Gzip and Brotli compressionbuild-asset-hashing - Content-based hashing for cache bustingsplit-route-lazy - Route-based splitting with React.lazy()split-suspense-boundaries - Strategic Suspense boundary placementsplit-dynamic-imports - Dynamic import() for heavy componentssplit-component-lazy - Lazy load non-critical componentssplit-prefetch-hints - Prefetch chunks on hover/idle/viewportdev-dependency-prebundling - Configure optimizeDeps for faster startsdev-fast-refresh - React Fast Refresh patternsdev-hmr-config - HMR server configurationasset-image-optimization - Image optimization and lazy loadingasset-svg-components - SVGs as React components with SVGRasset-fonts - Web font loading strategyasset-public-dir - Public directory vs JavaScript importsenv-vite-prefix - VITE_ prefix for client variablesenv-modes - Mode-specific environment filesenv-sensitive-data - Never expose secrets in client codebundle-visualizer - Analyze bundles with rollup-plugin-visualizerimport { 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: 'baseline-widely-available',
sourcemap: false,
chunkSizeWarningLimit: 500,
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
},
},
},
},
optimizeDeps: {
include: ['react', 'react-dom'],
},
server: {
port: 3000,
hmr: {
overlay: true,
},
},
})
import { lazy, Suspense } from 'react'
const Home = lazy(() => import('./pages/Home'))
const Dashboard = lazy(() => import('./pages/Dashboard'))
const Settings = lazy(() => import('./pages/Settings'))
function App() {
return (
<Suspense fallback={<LoadingSpinner />}>
{/* Routes here */}
</Suspense>
)
}
// src/vite-env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string
readonly VITE_APP_TITLE: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
Read individual rule files for detailed explanations and code examples:
rules/build-manual-chunks.md
rules/split-route-lazy.md
rules/env-vite-prefix.md
For the complete guide with all rules expanded: AGENTS.md