Files
e-ticket/vite.config.js
Serreau Jovann fe33b80351 Enable Vite file polling for Docker volume watch compatibility
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 17:48:54 +01:00

101 lines
3.2 KiB
JavaScript

// 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: {},
});