120 lines
4.4 KiB
TypeScript
120 lines
4.4 KiB
TypeScript
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'
|
|
}
|
|
}
|
|
});
|