From 170c7221a4c27e9f122afff72c0312f9df40cfef Mon Sep 17 00:00:00 2001 From: alorig <220087330+alorig@users.noreply.github.com> Date: Sun, 9 Nov 2025 20:47:49 +0500 Subject: [PATCH] Update vite.config.ts --- frontend/vite.config.ts | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index fe6b7409..a5583eca 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -32,6 +32,66 @@ export default defineConfig(({ mode }) => { target: 'es2020', }, }, + // Build configuration for code splitting + build: { + rollupOptions: { + output: { + // Manual chunk splitting for better code splitting + manualChunks: (id) => { + // Vendor chunks - separate large dependencies + if (id.includes('node_modules')) { + // React and React DOM together + if (id.includes('react') || id.includes('react-dom') || id.includes('react-router')) { + return 'vendor-react'; + } + // Chart libraries + if (id.includes('apexcharts') || id.includes('recharts')) { + return 'vendor-charts'; + } + // UI libraries + if (id.includes('@radix-ui') || id.includes('framer-motion')) { + return 'vendor-ui'; + } + // Other large vendors + return 'vendor'; + } + // Page chunks - each page gets its own chunk + if (id.includes('/pages/')) { + const match = id.match(/\/pages\/([^/]+)/); + if (match) { + const pageName = match[1]; + // Group by module + if (pageName === 'Planner' || id.includes('/Planner/')) { + return 'pages-planner'; + } + if (pageName === 'Writer' || id.includes('/Writer/')) { + return 'pages-writer'; + } + if (pageName === 'Thinker' || id.includes('/Thinker/')) { + return 'pages-thinker'; + } + if (pageName === 'Settings' || id.includes('/Settings/')) { + return 'pages-settings'; + } + if (pageName === 'Billing' || id.includes('/Billing/')) { + return 'pages-billing'; + } + // Individual page chunks for others + return `page-${pageName.toLowerCase()}`; + } + } + }, + // Optimize chunk file names + chunkFileNames: 'assets/js/[name]-[hash].js', + entryFileNames: 'assets/js/[name]-[hash].js', + assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', + }, + }, + // Increase chunk size warning limit (default is 500kb) + chunkSizeWarningLimit: 1000, + // Enable source maps in dev only + sourcemap: isDev, + }, // Only configure server and HMR in development mode ...(isDev && { server: {