Essayer gratuitement
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

AvantageDéfi
Partage de codeComplexité de build
Changements atomiquesTemps CI
CohérenceGestion 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

Articles Connexes