import tailwindcss from '@tailwindcss/vite'; import react from '@vitejs/plugin-react'; import laravel from 'laravel-vite-plugin'; import { resolve } from 'node:path'; import { defineConfig } from 'vite'; import { visualizer } from "rollup-plugin-visualizer"; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.tsx'], ssr: 'resources/js/ssr.tsx', refresh: true, }), react(), tailwindcss(), // visualizer({ // filename: 'dist/stats.html', // open: true, // Automatically open in browser // gzipSize: true, // Show gzipped sizes // brotliSize: true, // Show brotli compressed sizes // template: 'treemap', // Can be 'treemap', 'sunburst', 'network' // }) ], esbuild: { jsx: 'automatic', // Uncomment for production to remove console logs // drop: ["console", "debugger"], }, resolve: { alias: { 'ziggy-js': resolve(__dirname, 'vendor/tightenco/ziggy'), '@': resolve(__dirname, 'resources/js'), }, }, optimizeDeps: { exclude: ['@ffmpeg/ffmpeg', '@ffmpeg/util'] }, build: { rollupOptions: { output: { manualChunks: (id) => { // Skip manual chunks for SSR builds to avoid conflicts if (process.env.NODE_ENV === 'development' && id.includes('ssr')) { return; } // React core - keep separate and first if (id.includes('react') || id.includes('react-dom')) { return 'react-vendor'; } // Heavy libraries if (id.includes('@ffmpeg')) { return 'ffmpeg'; } if (id.includes('motion')) { return 'motion'; } if (id.includes('konva')) { return 'canvas'; } if (id.includes('recharts')) { return 'charts'; } // Radix UI components if (id.includes('@radix-ui')) { return 'radix-ui'; } // Form libraries if (id.includes('react-hook-form') || id.includes('@hookform') || id.includes('zod')) { return 'forms'; } // UI utilities if (id.includes('tailwind-merge') || id.includes('class-variance-authority') || id.includes('clsx') || id.includes('lucide-react') || id.includes('sonner') || id.includes('cmdk') || id.includes('next-themes')) { return 'ui-utils'; } // Other React components if (id.includes('react-day-picker') || id.includes('react-error-boundary') || id.includes('embla-carousel-react') || id.includes('react-resizable-panels')) { return 'react-components'; } // Non-React utilities if (id.includes('date-fns') || id.includes('axios') || id.includes('mitt') || id.includes('zustand') || id.includes('embla-carousel-autoplay')) { return 'utils'; } // Inertia if (id.includes('@inertiajs')) { return 'inertia'; } } } }, // Temporarily increase limit while optimizing chunkSizeWarningLimit: 1000, // Additional optimizations minify: 'esbuild', target: 'es2020', // Enable source maps for better debugging (optional) sourcemap: false, }, server: { headers: { 'Cross-Origin-Opener-Policy': 'same-origin', 'Cross-Origin-Embedder-Policy': 'require-corp' } } });