5 min lecture • Guide 361 of 877
Stratégies de Gestion Monorepo
Les monorepos hébergent plusieurs projets dans un seul dépôt. Bien fait, ils simplifient le partage et la cohérence. Mal fait, ils deviennent lents, confus et difficiles à maintenir. Ce guide couvre les approches pratiques de gestion de monorepo.
Compromis du Monorepo
| Avantage | Défi |
|---|---|
| Partage de code | Complexité de build |
| Changements atomiques | Temps CI |
| Cohérence | Gestion des permissions |
| Visibilité | Outillage requis |
Structure du Dépôt
Organiser le Monorepo
STRUCTURE MONOREPO
══════════════════
STRUCTURE TYPIQUE:
─────────────────────────────────────
monorepo/
├── apps/ # Applications
│ ├── web/ # Frontend web
│ ├── api/ # API Backend
│ ├── mobile/ # App mobile
│ └── admin/ # Dashboard admin
├── packages/ # Bibliothèques partagées
│ ├── ui/ # Composants UI
│ ├── utils/ # Utilitaires
│ ├── config/ # Config partagée
│ └── types/ # Définitions de types
├── tools/ # Outils de build
│ └── scripts/
├── package.json # Package racine
├── nx.json / turbo.json # Config outil monorepo
└── README.md
CONVENTIONS DE NOMMAGE:
─────────────────────────────────────
Packages:
├── @org/web (apps)
├── @org/api (apps)
├── @org/ui (packages)
├── @org/utils (packages)
├── Nommage scopé
└── Propriété claire
OWNERSHIP:
─────────────────────────────────────
Définir les propriétaires:
├── apps/web → Équipe Web
├── apps/api → Équipe Backend
├── packages/ui → Équipe Design Systems
├── packages/utils → Équipe Platform
├── Fichier CODEOWNERS
└── Responsabilité claire
Gestion des Dépendances
Dépendances Internes
GESTION DES DÉPENDANCES
═══════════════════════
DÉPENDANCES INTERNES:
─────────────────────────────────────
apps/web/package.json:
{
"dependencies": {
"@org/ui": "workspace:*",
"@org/utils": "workspace:*"
}
}
Utilisant protocole workspace:
├── Lie au package local
├── Pas de gestion de version
├── Utilise toujours l'actuel
├── Mises à jour atomiques
└── Deps internes simples
GRAPHE DE DÉPENDANCES:
─────────────────────────────────────
┌─────────┐
│ apps │
└────┬────┘
│ dépend de
┌────▼────┐
│packages │
└────┬────┘
│ peut dépendre de
┌────▼────┐
│packages │
└─────────┘
Règles:
├── Apps dépendent des packages
├── Packages peuvent dépendre des packages
├── Pas de dépendances circulaires
├── Packages ne dépendent pas des apps
└── Hiérarchie claire
DÉPENDANCES EXTERNES:
─────────────────────────────────────
Stratégies:
├── Remonter à la racine (même version)
├── Ou permettre versions par package
├── Cohérence préférée
├── Cadence de mise à jour régulière
└── Santé des dépendances
Système de Build
Builds Efficaces
SYSTÈME DE BUILD
════════════════
BUILDS INCRÉMENTAUX:
─────────────────────────────────────
Construire seulement ce qui a changé:
├── Détecter packages affectés
├── Construire seulement ceux-ci + dépendants
├── Mettre en cache les résultats
├── Réutiliser l'inchangé
└── Feedback rapide
EXEMPLE (Nx):
─────────────────────────────────────
# Build seulement affectés
nx affected:build
# Test seulement affectés
nx affected:test
# Lint seulement affectés
nx affected:lint
CACHE DISTANT:
─────────────────────────────────────
├── Cache partagé entre CI et local
├── Évite de rebuilder ce qui est caché
├── Accélération dramatique
├── Nx Cloud, Turborepo Remote Cache
└── Essentiel à l'échelle
Configuration CI
CI POUR MONOREPO:
┌─────────────────────────────────────────────────────────────┐
│ │
│ STRATÉGIE CI: │
│ │
│ 1. DÉTECTION DES CHANGEMENTS │
│ ├── Identifier packages modifiés │
│ ├── Inclure dépendants │
│ └── Ignorer non affectés │
│ │
│ 2. BUILD PARALLÈLE │
│ ├── Packages indépendants en parallèle │
│ ├── Respecter graphe de dépendances │
│ └── Maximiser parallélisation │
│ │
│ 3. CACHE │
│ ├── Cache des dépendances (node_modules) │
│ ├── Cache des builds (dist) │
│ └── Cache distant entre runs │
│ │
│ 4. VALIDATION │
│ ├── Lint packages affectés │
│ ├── Test packages affectés │
│ ├── Build packages affectés │
│ └── Déployer si applicable │
│ │
└─────────────────────────────────────────────────────────────┘
Dashboard Monorepo
┌────────────────────────────────────────────────────────────────┐
│ MONOREPO - Dashboard │
├────────────────────────────────────────────────────────────────┤
│ │
│ PACKAGES: │
│ ├── apps/web [████████████░░░░░░░░] 12 tâches │
│ ├── apps/api [██████████████░░░░░░] 15 tâches │
│ ├── packages/ui [████████░░░░░░░░░░░░] 8 tâches │
│ └── packages/utils [████░░░░░░░░░░░░░░░░] 4 tâches │
│ │
│ SANTÉ BUILD: │
│ ├── Temps CI moyen: 8 min (↓ vs 15 min avant cache) │
│ ├── Cache hit rate: 78% │
│ └── Builds affectés/total: 3/10 (70% économisé) │
│ │
│ DÉPENDANCES: │
│ ├── Externes à jour: 92% │
│ └── Alertes sécurité: 2 (à traiter) │
│ │
└────────────────────────────────────────────────────────────────┘
Intégration GitScrum
GitScrum supporte les monorepos avec:
- Labels package: Filtrage par package
- Ownership code: Mapping équipes-packages
- Tâches cross-packages: Changements atomiques
- Releases coordonnées: Versions multi-packages
- Rapports par package: Métriques granulaires