Aller au contenu

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).

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.json
Fenêtre de terminal
npx create-nx-workspace@latest my-workspace
# → Choisir : Angular / Integrated Monorepo
Fenêtre de terminal
# Démarrer une app
nx serve shop
# Builder une app
nx build shop --configuration=production
# Lancer les tests
nx test shop
nx test ui
# Générer une nouvelle app
nx g @nx/angular:app admin
# Générer une bibliothèque partagée
nx g @nx/angular:lib ui --directory=libs/ui
# Générer un composant dans une lib
nx g @nx/angular:component button --project=ui --export

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.

Fenêtre de terminal
nx graph

Ouvre 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.

NX analyse le graphe de dépendances pour savoir ce qu’un changement impacte :

Fenêtre de terminal
# Ne builder que ce qui a changé + ses dépendants
nx affected --target=build
# Ne tester que ce qui a changé + ses dépendants
nx affected --target=test
# Exécuter en parallèle
nx affected --target=build --parallel=3

En CI, cela évite de reconstruire et retester tout le monorepo à chaque commit.

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