Overview
ESBO Web uses Vite as its build tool, providing fast builds, optimized bundles, and modern JavaScript features. This guide explains the complete build process from source to production-ready assets.Build Command
The build process is triggered with:vite build command defined in package.json:
package.json
Vite Configuration
The build process is configured invite.config.js:
vite.config.js
ESBO Web uses a minimal Vite configuration, relying on sensible defaults for optimal performance.
Build Process Steps
Dependency Resolution
Vite analyzes
index.html as the entry point and traces all module dependencies:- JavaScript/JSX files in
src/ - CSS files (including Tailwind)
- Static assets in
public/ - External packages from
node_modules
Code Transformation
The build pipeline applies transformations:React (via @vitejs/plugin-react)
- Transpiles JSX to JavaScript
- Applies React Fast Refresh in development
- Optimizes React component rendering
- Transpiles modern JavaScript to browser-compatible code
- Removes development-only code
- Applies tree-shaking to remove unused exports
- Processes Tailwind CSS with PostCSS
- Applies Autoprefixer for browser compatibility
- Minifies CSS output
Bundle Optimization
Vite optimizes the output:
- Code splitting for better caching
- Minification (JavaScript and CSS)
- Asset hashing for cache busting
- Compression-friendly output
Output Directory Structure
After runningnpm run build, the dist/ directory contains:
The
[hash] in filenames is a content-based hash that changes only when the file content changes, enabling efficient long-term caching.CSS Processing Pipeline
Tailwind CSS is processed through PostCSS:postcss.config.js
Tailwind Processing
Tailwind scans configured files for class names:Only used utility classes are included in the final CSS bundle.
tailwind.config.js
Production vs Development Builds
Development Mode (npm run dev)
- No bundling required
- Hot Module Replacement (HMR)
- Source maps enabled
- Fast cold start
- Verbose error messages
Production Build (npm run build)
- Full bundling and optimization
- Minified output
- Tree-shaking applied
- Asset hashing
- Optimized for performance
Preview Production Build
Test the production build locally:dist/ directory, simulating production conditions.
Build Optimization Features
Code Splitting
Vite automatically splits code:- Main application code
- Vendor dependencies (React, React DOM, Lucide)
- Dynamic imports (if used)
Tree Shaking
Unused exports are eliminated:Asset Optimization
- Images: Copied to
dist/with optional optimization - Fonts: Inlined or copied based on size
- SVGs: Can be imported as components or URLs
Bundle Analysis
To analyze your bundle size, add the rollup visualizer:vite.config.js
Build Troubleshooting
Build Fails
Check for errors:- Dependency errors: Run
npm installto ensure all dependencies are installed - TypeScript errors: Fix type errors or adjust
tsconfig.json - ESLint errors: Run
npm run lintto identify issues - Memory issues: Increase Node.js memory:
NODE_OPTIONS=--max-old-space-size=4096 npm run build
Slow Build Times
Vite is typically very fast, but large projects may benefit from optimization.
- Reduce unnecessary dependencies
- Use dynamic imports for large libraries
- Enable caching in CI/CD pipelines
- Update to latest Vite version
CSS Not Loading
If styles are missing in production:- Verify Tailwind content paths in
tailwind.config.js - Check that CSS imports are present in
src/main.jsx - Ensure PostCSS is processing correctly
- Clear build cache:
rm -rf dist node_modules/.vite
Import Errors
Performance Metrics
Typical build metrics for ESBO Web:- Build time: 5-15 seconds
- Bundle size: ~150-200 KB (gzipped)
- Largest chunk: React + React DOM (~130 KB)
- CSS size: ~10-20 KB (gzipped)
Actual sizes depend on the features and dependencies used in your application.
CI/CD Integration
For automated builds in CI/CD:.github/workflows/build.yml
Next Steps
- Deploy to Vercel or other hosting platforms
- Configure environment variables for different environments
- Set up automated testing before builds
- Monitor bundle size over time