Skip to Content
GuideTurborepo

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 à :

  1. Cache intelligent - Ne rebuild que ce qui a changé
  2. Exécution parallèle - Maximise l’utilisation du CPU
  3. Graphe de dépendances - Comprend les relations entre packages
  4. 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Ă©s
  • outputs - 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Ă©veloppement
  • persistent: true - La tâche tourne en continu

Commandes courantes

Lancer toutes les tâches

# Development pnpm dev # Build pnpm build # Lint pnpm lint

Filtrer 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 --graph

Cette 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-run

Affiche ce qui serait exécuté et ce qui est en cache.

Nettoyer le cache

rm -rf node_modules/.cache/turbo

Bonnes pratiques

  1. Définir les outputs - Permet un cache efficace
  2. Utiliser dependsOn - Assure l’ordre correct de build
  3. Éviter le cache pour dev - Le développement doit toujours être frais
  4. Granularité des packages - Des packages plus petits = meilleur parallélisme

Ressources

Last updated on