Turborepo
Turborepo est un système de build haute performance pour les monorepos JavaScript/TypeScript.
Pourquoi Turborepo ?
Problèmes résolus
Dans un monorepo traditionnel :
- Rebuilder tout Ă chaque changement est lent
- Les dépendances entre packages doivent être gérées manuellement
- Le cache local n’existe pas
Solutions apportées
Turborepo résout ces problèmes grâce à :
- Cache intelligent - Ne rebuild que ce qui a changé
- Exécution parallèle - Maximise l’utilisation du CPU
- Graphe de dépendances - Comprend les relations entre packages
- Cache distant - Partage le cache entre machines (optionnel)
Configuration (turbo.json)
Voici la configuration utilisée dans ce projet :
{
"$schema": "https://turbo.build/schema.json",
"ui": "tui",
"tasks": {
"build": {
"dependsOn": ["^build"],
"inputs": ["$TURBO_DEFAULT$", ".env*"],
"outputs": [".next/**", "!.next/cache/**"]
},
"lint": {
"dependsOn": ["^lint"]
},
"dev": {
"cache": false,
"persistent": true
}
}
}Explication des tâches
build
"build": {
"dependsOn": ["^build"],
"inputs": ["$TURBO_DEFAULT$", ".env*"],
"outputs": [".next/**", "!.next/cache/**"]
}dependsOn: ["^build"]- Build les dépendances d’abord (le^indique les dépendances)inputs- Fichiers qui déclenchent un rebuild si modifiésoutputs- Fichiers générés à mettre en cache
lint
"lint": {
"dependsOn": ["^lint"]
}- Lint les dépendances avant de linter le package courant
dev
"dev": {
"cache": false,
"persistent": true
}cache: false- Pas de cache pour le développementpersistent: true- La tâche tourne en continu
Commandes courantes
Lancer toutes les tâches
# Development
pnpm dev
# Build
pnpm build
# Lint
pnpm lintFiltrer par package
# Builder uniquement l'app web
pnpm build --filter=web
# Builder un package et ses dépendances
pnpm build --filter=web...
# Builder tout sauf la documentation
pnpm build --filter='!doc'Voir le graphe de dépendances
pnpm turbo build --graphCette commande génère un fichier .png montrant le graphe de dépendances.
Cache
Cache local
Par défaut, Turborepo stocke le cache dans node_modules/.cache/turbo.
Vérifier l’état du cache
pnpm turbo build --dry-runAffiche ce qui serait exécuté et ce qui est en cache.
Nettoyer le cache
rm -rf node_modules/.cache/turboBonnes pratiques
- Définir les
outputs- Permet un cache efficace - Utiliser
dependsOn- Assure l’ordre correct de build - Éviter le cache pour
dev- Le développement doit toujours être frais - Granularité des packages - Des packages plus petits = meilleur parallélisme
Ressources
Last updated on