vite.config.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { defineConfig } from 'vite';
  2. import laravel from 'laravel-vite-plugin';
  3. export default defineConfig({
  4. plugins: [
  5. laravel({
  6. input: ['resources/css/app.css', 'resources/js/app.js'],
  7. refresh: true,
  8. }),
  9. ],
  10. build: {
  11. rollupOptions: {
  12. output: {
  13. manualChunks: (id, { getModuleInfo }) => {
  14. // 将 vendor 库分离到单独的 chunk
  15. if (id.includes('node_modules')) {
  16. // 按库名称分离 - 已优化的 chunk 配置
  17. if (id.includes('@alpinejs')) {
  18. return 'chunk-alpine';
  19. }
  20. if (id.includes('tailwindcss') || id.includes('daisyui')) {
  21. return 'chunk-ui';
  22. }
  23. if (id.includes('@popperjs') || id.includes('tippy')) {
  24. return 'chunk-popper';
  25. }
  26. if (id.includes('filament') || id.includes('forms')) {
  27. return 'chunk-filament';
  28. }
  29. if (id.includes('livewire')) {
  30. return 'chunk-livewire';
  31. }
  32. if (id.includes('@heroicons') || id.includes('lucide')) {
  33. return 'chunk-icons';
  34. }
  35. if (id.includes('intersect') || id.includes('focus-trap')) {
  36. return 'chunk-utils';
  37. }
  38. // 其他小库合并
  39. return 'chunk-vendor';
  40. }
  41. },
  42. },
  43. },
  44. // 将警告阈值提高到 1500KB (对于 Filament 应用是合理的)
  45. chunkSizeWarningLimit: 1500,
  46. // 启用高级压缩
  47. minify: 'terser',
  48. terserOptions: {
  49. compress: {
  50. drop_console: true,
  51. drop_debugger: true,
  52. pure_funcs: ['console.log'],
  53. passes: 2, // 压缩两遍获得更好效果
  54. },
  55. },
  56. },
  57. });