-
Objectifs
- Savoir ce qu'est Angular CLI et pourquoi on l'utilise
- Installer Angular CLI et vérifier son installation
- Comprendre la structure d'une commande
ng: commande, schéma, nom et options
- Créer un projet avec
ng new et le lancer avec ng serve
- Générer des composants, services, interfaces et autres éléments avec
ng generate
- Compiler l'application pour la publication avec
ng build
- Connaître les commandes
ng add, ng update, ng test et ng version
-
Présentation
- Angular CLI (Command Line Interface) est l'outil officiel en ligne de commande d'Angular. Il s'utilise dans un terminal avec la commande
ng.
- C'est un programme Node.js, installé avec npm (voir la leçon Présentation de l'environnement de développement Node.js).
- Angular CLI accompagne le projet du début à la fin :
- Créer un projet complet, déjà configuré, en une seule commande.
- Générer les fichiers d'un composant, d'un service, d'un pipe… en respectant les conventions d'Angular.
- Lancer un serveur de développement qui recompile et recharge la page à chaque sauvegarde.
- Tester le code avec les tests unitaires.
- Compiler une version optimisée de l'application, prête à être publiée.
- Ajouter des bibliothèques et mettre à jour Angular automatiquement.
- Pourquoi l'utiliser ? Sans la CLI, il faudrait configurer à la main le compilateur TypeScript, l'outil de bundle, le serveur de développement et les tests. La CLI cache cette complexité et garantit que tous les projets Angular ont la même organisation : un développeur qui rejoint un projet s'y retrouve tout de suite.

-
Installer et vérifier Angular CLI
- Angular CLI s'installe globalement avec npm, pour que la commande
ng soit disponible dans tous les dossiers :
npm install -g @angular/cli
- Vérifiez l'installation avec
ng version (ou sa forme courte ng v). La commande affiche les versions d'Angular CLI, de Node.js, de npm et du système d'exploitation :
ng version
- Pour mettre à jour la CLI installée globalement, relancez simplement
npm install -g @angular/cli.
- Sans installation globale, on peut aussi utiliser la CLI à la demande avec npx:
npx @angular/cli new mon-projet
Anatomie d'une commande
- Toutes les commandes de la CLI suivent la même structure :
ng <commande> [schéma] [nom] [options].
- La plupart des commandes et des options ont une forme courte (alias) :
generate devient g, component devient c, --dry-run devient -d.

- Pour obtenir de l'aide, ajoutez
--help à n'importe quelle commande :
ng help # liste de toutes les commandes
ng new --help # options de ng new
ng generate --help # liste des schémas disponibles
ng generate component --help
-
ng new : créer un projet
ng new crée un dossier portant le nom du projet, y génère tous les fichiers, installe les dépendances avec npm et initialise un dépôt Git avec un premier commit.
- La commande pose quelques questions : le format des styles (CSS, SCSS…) et l'activation du rendu côté serveur (SSR). Pour débuter, choisissez CSS et répondez No au SSR.
ng new ma-boutique

- On peut répondre aux questions directement avec des options, ce qui est pratique en séance :
ng new ma-boutique --style=css --ssr=false
- Les options les plus utiles de
ng new:
| Option |
Rôle |
--style=css |
Format des feuilles de style : css, scss, sass ou less |
--ssr=false |
Désactive le rendu côté serveur (SSR) |
--prefix=bt |
Préfixe des sélecteurs de composants (par défaut app, ex : app-liste devient bt-liste) |
--skip-tests |
Ne génère pas les fichiers de test .spec.ts |
--skip-install |
Crée les fichiers sans lancer npm install (utile hors connexion) |
--skip-git |
N'initialise pas de dépôt Git |
--directory=dossier |
Crée le projet dans un dossier au nom différent de celui du projet |
--dry-run (-d) |
Affiche les fichiers qui seraient créés, sans rien créer |
- Attention : lancez
ng new depuis le dossier qui doit contenir le projet (ex : C:\projets), jamais depuis l'intérieur d'un autre projet Angular. Toutes les autres commandes, au contraire, se lancent à la racine du projet, là où se trouve angular.json.
Activité 1 : créer le projet et le publier sur GitHub
- Dans le dossier
C:\projets (ou celui de votre choix), créez le projet ma-boutique avec le style CSS et sans SSR.
- Testez d'abord la commande avec
--dry-run: combien de fichiers seraient créés ? Le dossier existe-t-il après la commande ?
- Lancez la vraie commande, puis entrez dans le dossier avec
cd ma-boutique.
- Vérifiez que Git est déjà initialisé avec
git log --oneline: quel est le message du premier commit ?
- Créez un dépôt vide
ma-boutique sur GitHub et envoyez-y le projet :
git branch -M main
git remote add origin https://github.com/VOTRE-COMPTE/ma-boutique.git
git push -u origin main
-
ng serve : lancer le serveur de développement
ng serve compile l'application en mémoire et la sert sur http://localhost:4200.
- Le serveur surveille les fichiers: à chaque sauvegarde, il recompile uniquement ce qui a changé et recharge la page du navigateur.
- Le terminal reste occupé tant que le serveur tourne : ouvrez un second terminal pour taper d'autres commandes. Arrêtez le serveur avec Ctrl + C.
ng serve # lance le serveur
ng serve -o # lance le serveur et ouvre le navigateur (--open)
ng serve --port 4300
npm start # équivalent : le script "start" de package.json exécute ng serve

- Les options utiles de
ng serve:
| Option |
Rôle |
--open (-o) |
Ouvre automatiquement le navigateur |
--port 4300 |
Change le port (utile si le port 4200 est déjà occupé par un autre projet) |
--host 0.0.0.0 |
Rend l'application accessible depuis un autre appareil du réseau local (ex : un téléphone, avec l'adresse IP du poste) |
--configuration production |
Sert l'application avec la configuration de production |
-
Activité 2 : observer le rechargement automatique
- Lancez
ng serve -o dans le projet ma-boutique.
- Ouvrez
src/app/app.html, remplacez tout son contenu par <h1>Ma boutique</h1> et enregistrez : observez le terminal et le navigateur.
- Faites volontairement une erreur dans
src/app/app.ts (supprimez une accolade) et enregistrez : où l'erreur s'affiche-t-elle ? Corrigez-la.
- Arrêtez le serveur avec Ctrl + C, puis relancez-le sur le port 4300.
- Faites un commit :
git commit -am "Page d'accueil Ma boutique".
-
ng generate : générer des éléments
ng generate (forme courte ng g) crée les fichiers d'un élément Angular à partir d'un schéma (schematic), un modèle qui respecte les conventions officielles.
- Le chemin indiqué est relatif au dossier
src/app/. Les dossiers manquants sont créés automatiquement.
| Schéma |
Forme courte |
Exemple |
Ce qui est généré |
component |
c |
ng g c produits/liste |
Un composant : .ts, .html, .css et .spec.ts dans son propre dossier |
service |
s |
ng g s services/produit |
Une classe @Injectable et son test |
interface |
i |
ng g i models/produit |
Une interface TypeScript (ex : Produit) |
class |
cl |
ng g cl models/panier |
Une classe TypeScript |
enum |
e |
ng g e models/categorie |
Une énumération TypeScript |
directive |
d |
ng g d shared/surligner |
Une directive personnalisée |
pipe |
p |
ng g p shared/prix-tnd |
Un pipe personnalisé |
guard |
g |
ng g g core/auth |
Un guard de route (la CLI demande quel type : CanActivate…) |
interceptor |
— |
ng g interceptor core/jeton |
Un intercepteur HTTP |
environments |
— |
ng g environments |
Les fichiers environment.ts pour le développement et la production |

- Exemple : le composant généré par
ng g c produits/liste (fichier src/app/produits/liste/liste.ts)
import { Component } from '@angular/core';
@Component({
selector: 'app-liste',
imports: [],
templateUrl: './liste.html',
styleUrl: './liste.css'
})
export class Liste {
}
- Le sélecteur est formé du préfixe du projet (
app) et du nom (liste). Pour l'afficher, ajoutez Liste dans les imports du composant parent, puis la balise <app-liste /> dans son template.
- Remarque : dans les versions d'Angular antérieures à la 20, les fichiers générés portent un suffixe (
liste.component.ts, produit.service.ts) et les classes aussi (ListeComponent, ProduitService). Le principe est identique.
- Les options les plus utiles de
ng generate:
| Option |
Rôle |
--dry-run (-d) |
Simule la génération : affiche les fichiers sans les créer. À utiliser en cas de doute. |
--skip-tests |
Ne crée pas le fichier .spec.ts |
--flat |
Crée les fichiers directement dans le dossier indiqué, sans sous-dossier |
--inline-template (-t) |
Écrit le HTML dans le fichier .ts (propriété template) au lieu d'un fichier .html |
--inline-style (-s) |
Écrit le CSS dans le fichier .ts (propriété styles) au lieu d'un fichier .css |
# un petit composant tout-en-un, sans test
ng g c shared/badge -t -s --skip-tests
import { Component } from '@angular/core';
@Component({
selector: 'app-badge',
imports: [],
template: `
<p>
badge works!
</p>
`,
styles: ``
})
export class Badge {
}
-
Activité 3 : générer l'ossature de « Ma boutique »
- Dans un second terminal (gardez
ng serve actif dans le premier), générez avec la CLI :
- l'interface
models/produit;
- le service
services/produit;
- les composants
produits/liste et produits/detail;
- le composant
layout/entete en un seul fichier (template et styles intégrés) et sans test.
- Avant chaque commande, testez-la avec
--dry-run et vérifiez l'emplacement des fichiers.
- Complétez l'interface
Produit avec les propriétés id (number), nom (string), prix (number) et disponible (boolean).
- Affichez
<app-entete /> et <app-liste /> dans app.html (pensez aux imports du composant racine).
- Faites un commit après chaque génération, puis poussez sur GitHub :
git push.
-
ng build : compiler pour la publication
ng build compile l'application en mode production (configuration par défaut) : le code TypeScript est transformé en JavaScript, minifié, regroupé en quelques fichiers et débarrassé du code inutilisé.
- Le résultat est placé dans le dossier
dist/:
ng build
dist/
└── ma-boutique/
└── browser/ # contenu à publier sur le serveur web
├── index.html
├── main-XXXXXXXX.js # le code de l'application (nom unique à chaque build)
├── styles-XXXXXXXX.css
└── favicon.ico
- Les noms de fichiers contiennent une empreinte (hash) qui change à chaque modification : le navigateur ne garde jamais une ancienne version en cache.
- Le contenu de
browser/ se publie sur Apache, Nginx ou tout hébergement web : Node.js n'est pas nécessaire sur le serveur.
- Options utiles :
| Commande |
Rôle |
ng build |
Compilation de production, optimisée |
ng build --configuration development |
Compilation non optimisée, plus rapide et plus lisible, pour déboguer |
ng build --base-href /ma-boutique/ |
Prépare une application publiée dans un sous-dossier du site (ex : https://monsite.tn/ma-boutique/) |
ng build --watch |
Recompile automatiquement à chaque modification |
-
Les autres commandes essentielles
ng test: exécute les tests unitaires (fichiers .spec.ts) et affiche les résultats. L'outil de test utilisé dépend de la version d'Angular et de la configuration du projet.
ng add: installe une bibliothèque et la configure automatiquement dans le projet (dépendances, styles, configuration). Exemple :
ng add @angular/material
- Différence avec npm install :
npm install ne fait que télécharger le paquet. ng add le télécharge puis exécute son script d'installation, qui modifie les fichiers du projet. Il ne fonctionne qu'avec les bibliothèques prévues pour Angular. Pour Bootstrap, on utilise npm install bootstrap puis on déclare le CSS dans angular.json (voir Intégrer Bootstrap avec Angular).
ng update: sans argument, liste les paquets Angular qui peuvent être mis à jour. Avec des arguments, met à jour Angular et migre automatiquement le code si la nouvelle version l'exige :
ng update # liste les mises à jour disponibles
ng update @angular/core @angular/cli # met à jour Angular et la CLI du projet
- Conseil : faites un commit avant chaque
ng update. En cas de problème, vous pourrez revenir en arrière avec Git.
ng version (ng v) : affiche les versions installées. C'est la première information à donner quand on demande de l'aide.
ng lint: analyse la qualité du code. Il faut d'abord ajouter un outil d'analyse avec ng add angular-eslint.
Où la CLI lit-elle sa configuration ?
- La CLI lit le fichier
angular.json à la racine du projet. Il définit, pour chaque commande, l'outil utilisé (builder) et ses options : fichier d'entrée, styles globaux, dossier de sortie, configurations production et development.
- C'est pour cela que
ng serve ou ng build échouent hors du dossier du projet : la CLI ne trouve pas angular.json.
- Le fichier
package.json contient des raccourcis vers ces commandes :
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
}
npm start et npm run build utilisent la version de la CLI installée dans le projet (node_modules), ce qui évite les écarts de version avec la CLI globale.
Erreurs fréquentes
| Message ou symptôme |
Cause |
Solution |
| « 'ng' n'est pas reconnu en tant que commande interne » |
La CLI n'est pas installée globalement, ou le terminal a été ouvert avant l'installation |
npm install -g @angular/cli, puis fermer et rouvrir le terminal |
| « l'exécution de scripts est désactivée sur ce système » |
Politique d'exécution de PowerShell sous Windows |
Voir Erreur exécution de script, ou utiliser l'Invite de commandes |
| « This command is not available when running the Angular CLI outside a workspace » |
La commande est lancée hors du dossier du projet |
cd ma-boutique pour se placer là où se trouve angular.json |
| « Port 4200 is already in use » |
Un autre ng serve tourne déjà |
Arrêter l'autre serveur (Ctrl + C) ou lancer ng serve --port 4300 |
| « The Angular CLI requires a minimum Node.js version » |
Version de Node.js incompatible avec cette version d'Angular |
Installer une version LTS compatible (voir angular.dev/reference/versions) |
| « Cannot find module… » après un clonage |
Le dossier node_modules n'existe pas (il n'est pas sur GitHub) |
npm install à la racine du projet |
-
Aide-mémoire
| Commande |
Forme courte |
Rôle |
ng new nom |
ng n nom |
Créer un projet |
ng serve |
ng s |
Lancer le serveur de développement |
ng generate schéma nom |
ng g … |
Générer un élément |
ng build |
ng b |
Compiler pour la publication |
ng test |
ng t |
Lancer les tests unitaires |
ng add paquet |
— |
Ajouter et configurer une bibliothèque |
ng update |
— |
Mettre à jour Angular |
ng version |
ng v |
Afficher les versions |
ng help |
— |
Afficher l'aide |
-
Activité 4 : compiler et tester la version de production
- Arrêtez
ng serve et lancez ng build. Observez dans le terminal la taille totale des fichiers générés.
- Ouvrez le dossier
dist/ma-boutique/browser/: quels fichiers contient-il ? Pourquoi leurs noms contiennent-ils une suite de caractères ?
- Ouvrez
index.html de ce dossier en double-cliquant dessus : la page s'affiche-t-elle ? Expliquez pourquoi (indice : les fichiers doivent être servis par un serveur web).
- Servez le dossier avec un serveur web local, sans rien installer, grâce à npx :
npx http-server dist/ma-boutique/browser -p 8080
- Ouvrez
http://localhost:8080: c'est exactement ce que verront les visiteurs une fois l'application publiée.
- Vérifiez avec
git status que le dossier dist/ n'est pas proposé au commit : dans quel fichier est-il exclu ?
Activité 5 : défi
- Sans regarder la leçon, retrouvez la commande qui :
- crée un projet
bibliotheque avec SCSS, sans SSR et avec le préfixe bib;
- génère le composant
livres/carte-livre sans fichier de test et avec un template intégré ;
- simule la génération d'un pipe
shared/majuscule sans créer de fichier ;
- génère un guard
core/admin;
- lance le serveur sur le port 4500 et ouvre le navigateur ;
- compile l'application pour une publication dans le sous-dossier
/bibliotheque/.
- Exécutez vos commandes pour les vérifier, puis notez-les dans le fichier
README.md du projet, rubrique « Commandes utilisées ».
- Poussez le projet
bibliotheque sur GitHub et partagez le lien du dépôt.
À retenir
- Angular CLI est l'outil officiel, en ligne de commande, pour créer, générer, lancer, tester et compiler un projet Angular. Il s'utilise avec la commande
ng.
- Une commande suit la structure
ng <commande> [schéma] [nom] [options], et la plupart des éléments ont une forme courte.
ng new se lance depuis le dossier parent ; toutes les autres commandes se lancent à la racine du projet, là où se trouve angular.json.
ng serve sert l'application en développement sur le port 4200 ; ng build produit les fichiers à publier dans dist/.
--dry-run permet de vérifier une commande avant de l'exécuter, et --help affiche toutes les options.
La CLI fait le travail répétitif à votre place : prenez l'habitude de générer chaque composant, service ou pipe avec ng generate plutôt que de créer les fichiers à la main.