Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
NestJS

Configurer un projet NestJS (nest-cli.json, tsconfig.json, scripts npm)

Cette leçon présente les fichiers de configuration d'un projet NestJS : nest-cli.json (dossier source, nettoyage de dist, copie de fichiers, options de génération), tsconfig.json et les options indisp...

0 chapitres 0 QCM Accès gratuit
Configurer un projet NestJS (nest-cli.json, tsconfig.json, scripts npm)

À propos de ce cours

Cette leçon présente les fichiers de configuration d'un projet NestJS : nest-cli.json (dossier source, nettoyage de dist, copie de fichiers, options de génération), tsconfig.json et les options indispensables aux décorateurs, tsconfig.build.json, les scripts npm et leur personnalisation, ainsi que Prettier et ESLint. Les activités font désactiver la génération des fichiers de test, ajouter des scripts et observer l'effet des options TypeScript.

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.

Fichiers de configuration d'un projet NestJS

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
collectionModèles utilisés par nest generate
sourceRootDossier du code source
compilerOptions.deleteOutDirVide dist/ avant chaque compilation
compilerOptions.assetsFichiers non TypeScript à copier dans dist/ (modèles d'e-mails, fichiers JSON…)
compilerOptions.watchAssetsRecopie ces fichiers à chaque modification en mode watch
generateOptions.specfalse 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é.