✨ feat(vite): Ajoute la compression gzip et brotli, l'obfuscation et découpe le code.
This commit is contained in:
126
vite.config.js
126
vite.config.js
@@ -4,87 +4,91 @@ import { defineConfig } from 'vite';
|
||||
import { resolve } from 'path';
|
||||
import JavaScriptObfuscator from 'rollup-plugin-javascript-obfuscator';
|
||||
import tailwindcss from '@tailwindcss/vite'
|
||||
import preact from '@preact/preset-vite';
|
||||
import ViteFaviconsPlugin from "vite-plugin-favicon";
|
||||
|
||||
// Si vous utilisez un framework comme Vue ou React, importez son plugin ici
|
||||
// import vue from '@vitejs/plugin-vue';
|
||||
// import react from '@vitejs/plugin-react';
|
||||
import viteCompression from 'vite-plugin-compression';
|
||||
|
||||
export default defineConfig({
|
||||
// La racine de votre projet frontend. Tous les chemins seront résolus par rapport à ce dossier.
|
||||
root: './assets',
|
||||
|
||||
// Base publique de l'URL lorsque l'application est déployée.
|
||||
base: '/assets/',
|
||||
|
||||
|
||||
|
||||
// --- Options du serveur de développement (vite dev) ---
|
||||
server: {
|
||||
// Écoute sur toutes les interfaces réseau locales
|
||||
host: "0.0.0.0",
|
||||
|
||||
// Autorise l'accès depuis ces hôtes
|
||||
allowedHosts: ["esyweb.local"],
|
||||
|
||||
// Port du serveur de développement Vite
|
||||
port: 5173,
|
||||
|
||||
// Ne pas ouvrir automatiquement le navigateur
|
||||
open: false,
|
||||
|
||||
// Configuration CORS pour autoriser les requêtes depuis votre backend Symfony
|
||||
cors: {
|
||||
origin: ['https://esyweb.local']
|
||||
},
|
||||
},
|
||||
// ... (root, base, server, resolve restent inchangés)
|
||||
|
||||
// --- Options de build (vite build) ---
|
||||
build: {
|
||||
// Chemin de sortie des fichiers compilés, relatif à la racine du projet
|
||||
outDir: resolve(__dirname, 'public/build'),
|
||||
|
||||
// Les assets compilés iront dans public/build/assets
|
||||
assetsDir: '',
|
||||
|
||||
// Vide le répertoire de sortie avant chaque build
|
||||
emptyOutDir: true,
|
||||
|
||||
// Génère un fichier manifest.json pour l'intégration avec Symfony
|
||||
manifest: true,
|
||||
// Conservez sourcemap: false pour la production
|
||||
|
||||
// Désactive les sourcemaps pour la production
|
||||
sourcemap: false,
|
||||
|
||||
// Minification du code avec esbuild (rapide et efficace)
|
||||
// Minification par défaut : esbuild est déjà très rapide et efficace
|
||||
minify: 'esbuild',
|
||||
cssMinify: 'esbuild',
|
||||
// Configuration avancée de Rollup (utilisé par Vite pour le build)
|
||||
|
||||
// NOUVEAU : Petits assets intégrés directement dans le JS pour moins de requêtes HTTP
|
||||
assetsInlineLimit: 4096, // 4ko, par défaut, mais une bonne pratique
|
||||
|
||||
// NOUVEAU : Stratégie de découpage du code pour améliorer le cache client
|
||||
rollupOptions: {
|
||||
// Points d'entrée de votre application
|
||||
input: {
|
||||
app: resolve(__dirname, 'assets/app.js'),
|
||||
},
|
||||
output: {
|
||||
// Sépare les vendors (libs) du code de l'application.
|
||||
// Le hash des vendors ne changera que si les dépendances changent,
|
||||
// maximisant le cache du navigateur.
|
||||
manualChunks(id) {
|
||||
if (id.includes('node_modules')) {
|
||||
// Place toutes les dépendances dans un fichier 'vendor'
|
||||
return 'vendor';
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
// --- Résolution des modules ---
|
||||
resolve: {
|
||||
// Alias pour simplifier les importations
|
||||
alias: {
|
||||
'@': resolve(__dirname, 'assets'),
|
||||
},
|
||||
// Extensions de fichiers à résoudre automatiquement
|
||||
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss', '.css'],
|
||||
},
|
||||
|
||||
// --- Plugins Vite ---
|
||||
plugins: [
|
||||
// Ajoutez ici les plugins de framework (ex: vue(), react())
|
||||
tailwindcss()
|
||||
],
|
||||
tailwindcss(),
|
||||
// NOUVEAU: Ajoutez Preact/React/Vue si vous utilisez ces frameworks
|
||||
// preact(),
|
||||
|
||||
// Définition de variables d'environnement globales (si nécessaire)
|
||||
define: {},
|
||||
// 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
|
||||
}),
|
||||
|
||||
// 2. Obfuscation (Optionnel : sécurité et taille)
|
||||
// Ajouté à la fin des plugins pour obfuscater le code final.
|
||||
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 reste inchangé)
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user