Build System Overview
Bimble Chat Vue uses Vite as its build tool, providing lightning-fast development experience and optimized production builds. The build system handles:
Fast Development
Hot Module Replacement (HMR) with instant updates
Code Splitting
Automatic code splitting for optimal loading performance
Tree Shaking
Removes unused code for smaller bundle sizes
Asset Optimization
Automatic optimization of images, CSS, and JavaScript
Development Build
Start the development server for local development with hot reload:
Start Development Server
Run the development server with hot module replacement:
npm run dev
yarn dev
pnpm dev
Development Features
The development build includes:
- Source Maps: Full source map support for debugging
- Hot Module Replacement: Instant updates without page refresh
- CSS Hot Reload: SCSS changes apply instantly
- Error Overlay: In-browser error display
- Fast Refresh: Vue component state preservation
Development Server Details
The development server runs on http://localhost:5173
by default and automatically opens in your browser.
Production Build
Create an optimized production build ready for deployment:
Build for Production
Generate optimized production files:
npm run build
yarn build
pnpm build
Build Output
The production build creates a dist/
directory with optimized files:
Preview Production Build
Test the production build locally before deployment:
npm run preview
yarn preview
pnpm preview
Build Configuration
Customize the build process through Vite configuration:
Vite Configuration
The build is configured in vite.config.js
:
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vuetify from "vite-plugin-vuetify";
export default defineConfig({
base: "./",
plugins: [
vue(),
vuetify({
autoImport: true,
styles: { configFile: "src/scss/variables.scss" }
})
],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url))
}
},
css: {
preprocessorOptions: {
scss: {}
}
},
optimizeDeps: {
exclude: ["vuetify"],
entries: ["./src/**/*.vue"]
}
});
TypeScript Configuration
TypeScript compilation is configured in tsconfig.json
:
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"strict": true
}
}
Build Optimization
Optimize your production builds for better performance:
Code Splitting
Automatic route-based and component-based code splitting
Asset Minification
Automatic minification of JavaScript, CSS, and HTML
Image Optimization
Optimized image loading and compression
Cache Busting
Automatic hash-based file naming for cache invalidation
Performance Tips
- Use dynamic imports for route-based code splitting
- Optimize images in
src/assets/images/
- Remove unused CSS with tree shaking
- Enable compression on your web server
Deployment
Deploy your production build to various hosting platforms:
Static Hosting
Deploy to Netlify, Vercel, or other static hosting platforms
- Zero configuration
- Automatic deployments
- CDN included
- SSL certificates
GitHub Pages
Deploy directly from your GitHub repository with Actions
- Free hosting
- Git integration
- Custom domains
- Automated workflows
Docker Container
Containerize your application for any cloud platform
- Platform agnostic
- Scalable deployment
- Environment consistency
- Easy orchestration
Static Hosting Setup
Deploy to static hosting platforms like Netlify or Vercel:
Build for Production
RequiredFirst, create an optimized production build:
# Build the project
npm run build
# Upload dist/ folder to your hosting platform
# Or connect your Git repository for automatic deployments
GitHub Pages with Actions
Set up automated deployment to GitHub Pages:
GitHub Actions Workflow
AutomatedCreate a workflow file for automatic deployment:
# .github/workflows/deploy.yml
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run build
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
Docker Containerization
Create a Docker container for cloud deployment:
Multi-stage Dockerfile
ProductionOptimize your container with multi-stage build:
# Dockerfile
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Environment Variables
Configure environment-specific settings for different deployment stages:
Environment Files
Create environment-specific configuration files:
# .env.local (development)
VITE_APP_TITLE=Bimble Chat Vue (Development)
VITE_API_BASE_URL=http://localhost:3000/api
VITE_ENABLE_MOCK_API=true
# .env.production (production)
VITE_APP_TITLE=Bimble Chat Vue
VITE_API_BASE_URL=https://api.yourdomain.com
VITE_ENABLE_MOCK_API=false
Using Environment Variables
Access environment variables in your Vue components:
// In your Vue components
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL;
const appTitle = import.meta.env.VITE_APP_TITLE;
const enableMockApi = import.meta.env.VITE_ENABLE_MOCK_API === 'true';
// In your configuration files
export const config = {
apiBaseUrl: import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000/api',
appTitle: import.meta.env.VITE_APP_TITLE || 'Bimble Chat Vue',
enableMockApi: import.meta.env.VITE_ENABLE_MOCK_API === 'true'
};
Troubleshooting
Build Fails with Memory Issues
Issue: Build process runs out of memory on large projects.
Solution:
# Increase Node.js memory limit
NODE_OPTIONS="--max-old-space-size=4096" npm run build
# Or in package.json scripts
"build": "NODE_OPTIONS='--max-old-space-size=4096' vite build"
Assets Not Loading in Production
Issue: Static assets return 404 errors in production.
Solution:
- Check the
base
configuration invite.config.js
- Ensure assets are imported correctly:
import logo from '@/assets/logo.svg'
- Use relative paths for deployment in subdirectories
Large Bundle Size
Issue: Production bundle is larger than expected.
Solution:
- Analyze bundle with
npm run build -- --sourcemap
- Use dynamic imports for large components
- Remove unused dependencies and code
- Optimize images and assets