// vite.config.js import { defineConfig } from 'vite'; import { resolve } from 'path'; import JavaScriptObfuscator from 'rollup-plugin-javascript-obfuscator'; import tailwindcss from '@tailwindcss/vite' import viteCompression from 'vite-plugin-compression'; export default defineConfig({ root: './assets', base: '/assets/', server: { host: "0.0.0.0", allowedHosts: ["esyweb.local"], port: 5173, open: false, cors: { origin: ['https://esyweb.local'] }, watch: { usePolling: true, interval: 1000, }, }, resolve: { alias: { '@': resolve(__dirname, 'assets'), }, // Extensions de fichiers à résoudre automatiquement extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss', '.css'], }, build: { outDir: resolve(__dirname, 'public/build'), assetsDir: '', emptyOutDir: true, manifest: true, sourcemap: false, // Minification par défaut : esbuild est déjà très rapide et efficace minify: 'esbuild', cssMinify: 'esbuild', // NOUVEAU : Stratégie de découpage du code pour améliorer le cache client rollupOptions: { input: { app: resolve(__dirname, 'assets/app.js'), admin: resolve(__dirname, 'assets/admin.js'), } }, }, // --- Plugins Vite --- plugins: [ tailwindcss(), // NOUVEAU: Ajoutez Preact/React/Vue si vous utilisez ces frameworks // preact(), // 1. Compression des Assets (Gzip et Brotli) // Crée des fichiers .gz et .br à côté des assets originaux. // Votre serveur web (Nginx/Apache) doit être configuré pour servir ces versions compressées. viteCompression({ verbose: true, disable: false, threshold: 10240, // Compresse seulement les fichiers > 10KB algorithm: 'gzip', ext: '.gz', }), viteCompression({ verbose: true, disable: false, threshold: 10240, algorithm: 'brotliCompress', // Brotli est plus efficace que Gzip ext: '.br', // Ne génère le brotli que si l'algorithme est disponible (par défaut) deleteOriginFile: false // Important : gardez les fichiers originaux }), JavaScriptObfuscator({ // Options recommandées pour un bon équilibre entre sécurité et performance compact: true, sourceMap: false, controlFlowFlattening: true, // Très efficace mais coûteux en performance à l'exécution deadCodeInjection: false, debugProtection: false, identifierNamesGenerator: 'hexadecimal', // Rend le code illisible log: false, numbersToExpressions: true, simplify: true, splitStrings: true, stringArray: true, stringArrayThreshold: 0.75, transformObjectKeys: true, unicodeEscapeSequence: false, }), ], define: {}, });