Envoyer du code brut de développement en production est une catastrophe pour les performances et la sécurité. Le build de production transforme des centaines de fichiers sources en un ensemble compact, minifié, purgé du code mort et taillé pour un chargement instantané sur mobile.
Suppression des espaces, sauts de ligne et renommage des variables longues (utilisateurConnecte → a).
Analyse statique de l'AST pour exclure physiquement les fonctions des bibliothèques jamais appelées dans votre code.
Ajout d'une empreinte cryptographique dans le nom des fichiers (ex: main.a7f8b9.js) pour un cache CDN infini sans bug.
Nettoyage automatisé des console.log pour éviter les fuites d'informations sensibles dans la console DevTools.
Activez ou désactivez les optimisations de compilation pour observer la réduction drastique de la taille des fichiers envoyés aux utilisateurs :
Élimination du code mort des bibliothèques
Suppression des espaces et raccourcissement des identifiants
Purge des console.log et traces de debug
Algorithme de compression réseau HTTP
Pourquoi les bundlers modernes génèrent-ils des fichiers nommés main.7e9f1a.js au lieu de main.js ?
Cela permet une stratégie de mise en cache HTTP parfaite et ultra-rapide :
index.html :Cache-Control: no-cache (Le navigateur re-vérifie toujours si une nouvelle version existe). .js, .css) :Cache-Control: public, max-age=31536000, immutable (Le navigateur et le CDN gardent le fichier en cache pendant 1 an sans jamais le re-télécharger, car dès que le code change, le nom du fichier change automatiquement !). Pour éliminer automatiquement tous les console.log et debugger lors du build de production sans toucher manuellement à vos fichiers :
// vite.config.ts
import { defineConfig } from 'vite';
export default defineConfig({
build: {
minify: 'esbuild', // Minification ultra-rapide
target: 'es2020',
rollupOptions: {
output: {
manualChunks: {
vendor: ['angular', 'rxjs'] // Séparation du code framework pour optimiser le cache
}
}
}
},
esbuild: {
// Supprime automatiquement les logs uniquement lors du build de production
drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : []
}
});