veza/apps/web/vite.config.ts
senke fa6f0bbda5 config(dev): add Vite proxy for API requests
Added proxy configuration to forward /api requests to backend
on localhost:8080 during development.

Benefits:
- Eliminates CORS errors in dev (requests are same-origin)
- No need for CORS_ALLOWED_ORIGINS in dev environment
- Matches production behavior (frontend and API on same domain)
- Simplifies local development setup

Configuration:
- Target: http://localhost:8080
- changeOrigin: true (modifies Host header)
- secure: false (allows self-signed certs in dev)

Impact: Dev environment more stable, no CORS configuration needed.

Fixes: P2.1 from audit AUDIT_TEMP_29_01_2026.md
2026-01-29 23:22:32 +01:00

84 lines
No EOL
2.6 KiB
TypeScript

/// <reference types="vitest" />
import { defineConfig, type Plugin } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import { visualizer } from 'rollup-plugin-visualizer'
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const isProduction = mode === 'production'
return {
plugins: [
react(),
// Bundle analyzer for production builds
(isProduction && visualizer({
filename: 'dist/bundle-analysis.html',
open: false,
gzipSize: true,
brotliSize: true,
})) as Plugin,
].filter(Boolean),
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/setupTests.ts',
css: true,
},
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
'@components': path.resolve(__dirname, './src/components'),
'@features': path.resolve(__dirname, './src/features'),
'@services': path.resolve(__dirname, './src/services'),
'@hooks': path.resolve(__dirname, './src/hooks'),
'@utils': path.resolve(__dirname, './src/utils'),
'@types': path.resolve(__dirname, './src/types'),
},
},
server: {
port: 5173,
host: true,
// P2.1: Proxy API requests to backend in development
// This eliminates CORS issues in dev by making all requests same-origin
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
secure: false,
},
},
},
build: {
outDir: 'dist_verification',
sourcemap: isProduction ? 'hidden' : true,
target: 'esnext',
minify: 'esbuild',
rollupOptions: {
output: {
manualChunks: (id) => {
// Core Vendors
if (id.includes('node_modules/react/') ||
id.includes('node_modules/react-dom/') ||
id.includes('node_modules/react/jsx-runtime')) {
return 'vendor-react';
}
if (id.includes('node_modules')) {
if (id.includes('react-router')) return 'vendor-router';
if (id.includes('@tanstack')) return 'vendor-tanstack';
if (id.includes('lucide-react')) return 'vendor-icons';
if (id.includes('date-fns')) return 'vendor-utils';
if (id.includes('zod')) return 'vendor-utils';
return 'vendor'; // Default vendor chunk
}
},
},
},
chunkSizeWarningLimit: 1000,
},
// Standard optimization settings usually work best
optimizeDeps: {
include: ['react', 'react-dom']
},
}
})