Aller au contenu

Budgets Angular

Les budgets définissent des limites de taille sur la sortie du build. Angular avertit ou fait échouer le build si un bundle dépasse le seuil, empêchant ainsi la croissance accidentelle du bundle de passer inaperçue.

"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kb",
"maximumError": "1mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kb",
"maximumError": "8kb"
}
]
}
}
Type Ce qu’il mesure
initial JS + CSS chargés au démarrage (le plus important)
lazy N’importe quel chunk lazy-loaded
allScript Somme de tous les scripts JS
anyScript N’importe quel fichier JS
any N’importe quel fichier de sortie
anyComponentStyle Les styles inline d’un seul composant
Niveau Comportement
maximumWarning Le build réussit, un avertissement est affiché
maximumError Le build échoue — le pipeline CI est bloqué

Définissez maximumWarning de manière conservative pour détecter la dérive tôt. Utilisez maximumError comme limite absolue.

Quand un budget est dépassé, trouvez le responsable :

Fenêtre de terminal
# Étape 1 : générer le fichier de statistiques
ng build --stats-json
# Étape 2 : visualiser
npx webpack-bundle-analyzer dist/my-app/browser/stats.json

Causes fréquentes de bundles trop volumineux :

  • Import d’une bibliothèque entière au lieu de fonctions spécifiques (import * as _ from 'lodash')
  • Une grande dépendance tierce chargée en eager au lieu de lazy
  • Dépendances dupliquées (différentes versions du même package)
// ❌ Importe toute la bibliothèque (~70 ko)
import * as _ from 'lodash';
// ✅ Tree-shakeable — seul ce que vous utilisez
import { debounce } from 'lodash-es';
// ❌ Eager — augmente le bundle initial
import { ChartModule } from 'chart.js';
// ✅ Lazy — chargé uniquement quand nécessaire
const { Chart } = await import('chart.js');
Type d’application Avertissement initial Erreur initial
Landing / marketing 150 ko 250 ko
Application standard 400 ko 800 ko
Dashboard riche 600 ko 1 Mo

Configurez les budgets à la création du projet — les mettre en place rétroactivement sur une grande application est douloureux.