À propos de ce cours
Objectifs de la leçon
- Connaître le rôle de chaque fichier de configuration.
- Modifier le comportement de la CLI avec nest-cli.json.
- Comprendre les options essentielles de tsconfig.json.
- Personnaliser les scripts npm.
Chaque fichier de configuration a un rôle précis.
nest-cli.json : la configuration de la CLI
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}
| Clé | Rôle |
|---|---|
collection | Modèles utilisés par nest generate |
sourceRoot | Dossier du code source |
compilerOptions.deleteOutDir | Vide dist/ avant chaque compilation |
compilerOptions.assets | Fichiers non TypeScript à copier dans dist/ (modèles d'e-mails, fichiers JSON…) |
compilerOptions.watchAssets | Recopie ces fichiers à chaque modification en mode watch |
generateOptions.spec | false pour ne plus générer de fichiers .spec.ts |
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true,
"assets": ["mails/**/*.hbs"],
"watchAssets": true
},
"generateOptions": {
"spec": false
}
}
tsconfig.json : la configuration de TypeScript
Extrait des options importantes (les valeurs exactes varient selon la version de la CLI) :
{
"compilerOptions": {
"emitDecoratorMetadata": true, // indispensable : métadonnées des décorateurs
"experimentalDecorators": true, // indispensable : syntaxe @Decorateur
"target": "ES2023", // version de JavaScript produite
"outDir": "./dist", // dossier de sortie
"sourceMap": true, // lien entre JS et TS (débogage)
"baseUrl": "./",
"incremental": true, // compilation plus rapide
"skipLibCheck": true,
"strictNullChecks": true, // null / undefined vérifiés (mode strict)
"noImplicitAny": true // type any implicite interdit (mode strict)
}
}
Ne désactivez jamais experimentalDecorators et emitDecoratorMetadata: sans eux, les décorateurs (@Module, @Controller…) et l'injection de dépendances ne fonctionnent plus.
tsconfig.build.json
Il reprend tsconfig.json et exclut ce qui ne doit pas être compilé pour la production : les tests et le dossier dist.
{
"extends": "./tsconfig.json",
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}
Les scripts npm
Les scripts générés (leçon 2.4) peuvent être complétés. Exemple : un script qui vérifie tout avant un push, et un script de nettoyage.
"scripts": {
"build": "nest build",
"start:dev": "nest start --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:e2e": "jest --config ./test/jest-e2e.json",
"verifier": "npm run lint && npm run test && npm run build"
}
npm run verifier enchaîne les trois commandes et s'arrête à la première erreur grâce à &&.
Prettier et ESLint
.prettierrc fixe le style du code, partagé par toute l'équipe :
{
"singleQuote": true,
"trailingComma": "all"
}
Le fichier de configuration ESLint définit les règles de qualité (variables inutilisées, promesses non attendues…). Ces deux outils sont utilisés par npm run format, npm run lint et par VS Code (leçon 2.5).
Activités
Activité 1 Ne plus générer de fichiers de test
Modifiez nest-cli.json pour ne plus générer de fichiers .spec.ts, puis lancez nest g mo groupes --dry-run et nest g s groupes --dry-run. Le fichier groupes.service.spec.ts apparaît-il ?
Voir le corrigé
Avec "generateOptions": { "spec": false }, la CLI ne crée plus que groupes.service.ts. On peut toujours forcer un test ponctuellement avec --spec.
Activité 2 Un script de vérification
Ajoutez le script verifier ci-dessus et lancez-le. Introduisez ensuite une erreur de type dans app.service.ts (par exemple const n: number = 'dix';) et relancez. À quelle étape la vérification s'arrête-t-elle ?
Voir le corrigé
Selon les règles ESLint du projet, la vérification s'arrête dès le lint (variable déclarée mais inutilisée) ou aux tests (ts-jest refuse de compiler un fichier contenant une erreur de type). Dans tous les cas, npm run build n'est jamais exécuté : c'est l'effet de &&. Corrigez l'erreur et relancez : les trois étapes réussissent.
Activité 3 Observer dist/
Lancez npm run build et ouvrez dist/app.controller.js. Retrouvez-vous les décorateurs ? Que contiennent les fichiers .js.map?
Voir le corrigé
Les décorateurs sont transformés en appels de fonctions (__decorate([...]), __metadata('design:paramtypes', ...)) : ce sont ces métadonnées, produites grâce à emitDecoratorMetadata, qui permettent l'injection de dépendances. Les fichiers .js.map relient le JavaScript au TypeScript d'origine pour le débogage.
À retenir
- nest-cli.json configure la CLI : source, build, assets, génération.
- tsconfig.json configure TypeScript ; experimentalDecorators et emitDecoratorMetadata sont indispensables.
- tsconfig.build.json exclut les tests de la compilation de production.
- Les scripts npm peuvent être enrichis (ex. npm run verifier).
- .prettierrc et ESLint garantissent un code homogène et de qualité.