import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; import viteCompression from 'vite-plugin-compression'; import { visualizer } from 'rollup-plugin-visualizer'; import path from 'path'; export default defineConfig({ plugins: [ // Plugin React react(), // Compression Brotli viteCompression({ algorithm: 'brotliCompress', ext: '.br', threshold: 10240, // Fichiers supérieurs à 10 Ko seront compressés }), // Compression Gzip viteCompression({ algorithm: 'gzip', ext: '.gz', threshold: 10240, }), // Visualiseur de bundle visualizer({ open: true, // Ouvre automatiquement le fichier généré après le build filename: 'stats.html', template: 'treemap', }), ], resolve: { alias: { // Définit les alias pour des chemins simplifiés '@pages': path.resolve(__dirname, './src/pages'), '@components': path.resolve(__dirname, './src/components'), '@assets': path.resolve(__dirname, './src/assets'), }, }, build: { chunkSizeWarningLimit: 1000, target: 'esnext', // Cible des navigateurs modernes minify: 'esbuild', // Minification avec esbuild pour une meilleure performance sourcemap: false, // Désactive les sourcemaps en production (activez pour dev si nécessaire) rollupOptions: { output: { manualChunks(id) { // Création de chunks manuels pour optimiser les performances if (id.includes('node_modules')) { if (id.includes('@mui')) { return 'vendor_mui'; // Chunk spécifique à MUI } return 'vendor'; // Autres dépendances } }, }, }, }, server: { port: 3000, // Définit le port du serveur de développement open: true, // Ouvre automatiquement le navigateur au démarrage cors: true, // Autorise toutes les requêtes CORS }, optimizeDeps: { include: [ 'swiper/react', // Inclut swiper/react dans les dépendances optimisées 'swiper/modules', // Inclut swiper/modules dans les dépendances optimisées ], exclude: [ 'cssnano', // Exclut les dépendances problématiques comme cssnano ], }, });