NX Monorepo
NX est un système de build open-source qui orchestre les monorepos. Il ajoute du cache, des graphes de dépendances, des générateurs de code et des commandes affected par-dessus un workspace Angular (ou multi-framework).
Structure d’un monorepo
Section intitulée « Structure d’un monorepo »my-workspace/├── apps/│ ├── shop/ ← Application Angular│ └── admin/ ← Autre application Angular├── libs/│ ├── ui/ ← Bibliothèque de composants partagés│ ├── data-access/ ← Services et modèles partagés│ └── utils/ ← Fonctions utilitaires pures├── nx.json ← Config globale NX├── tsconfig.base.json ← Aliases de chemins partagés└── package.jsonCréer un workspace
Section intitulée « Créer un workspace »npx create-nx-workspace@latest my-workspace# → Choisir : Angular / Integrated MonorepoCommandes essentielles
Section intitulée « Commandes essentielles »# Démarrer une appnx serve shop
# Builder une appnx build shop --configuration=production
# Lancer les testsnx test shopnx test ui
# Générer une nouvelle appnx g @nx/angular:app admin
# Générer une bibliothèque partagéenx g @nx/angular:lib ui --directory=libs/ui
# Générer un composant dans une libnx g @nx/angular:component button --project=ui --exportBibliothèques partagées et aliases de chemins
Section intitulée « Bibliothèques partagées et aliases de chemins »Quand vous générez une lib, NX enregistre automatiquement un alias de chemin dans tsconfig.base.json :
{ "compilerOptions": { "paths": { "@my-workspace/ui": ["libs/ui/src/index.ts"], "@my-workspace/data-access": ["libs/data-access/src/index.ts"] } }}Consommez-la depuis n’importe quelle app :
import { ButtonComponent } from '@my-workspace/ui';Aucun npm publish nécessaire — les bibliothèques sont résolues localement.
Graphe de dépendances
Section intitulée « Graphe de dépendances »nx graphOuvre une vue navigateur interactive montrant quelles apps dépendent de quelles libs. Les dépendances circulaires sont signalées automatiquement.
Règle : les apps dépendent des libs, jamais l’inverse. Les libs peuvent dépendre d’autres libs.
Commandes affected (optimisation CI)
Section intitulée « Commandes affected (optimisation CI) »NX analyse le graphe de dépendances pour savoir ce qu’un changement impacte :
# Ne builder que ce qui a changé + ses dépendantsnx affected --target=build
# Ne tester que ce qui a changé + ses dépendantsnx affected --target=test
# Exécuter en parallèlenx affected --target=build --parallel=3En CI, cela évite de reconstruire et retester tout le monorepo à chaque commit.
Conventions de nommage des bibliothèques
Section intitulée « Conventions de nommage des bibliothèques »| Type | Contenu | Exemple de nom |
|---|---|---|
feature |
Composants smart, pages, routing | feature-checkout |
ui |
Composants présentationnels | ui-button, ui-form |
data-access |
Services, store, appels HTTP | data-access-products |
util |
Fonctions pures, helpers | util-formatting |
NX vs Workspace Angular natif
Section intitulée « NX vs Workspace Angular natif »| Fonctionnalité | Workspace Angular | NX |
|---|---|---|
| Multi-apps | Basique | Avancé |
| Cache de build | Aucun | Local + Cloud |
| Graphe de dépendances | Aucun | Visuel |
| Générateurs de code | Limité | Écosystème de plugins |
| Builds affectés | Aucun | nx affected |

