
Dans le chapitre précédent, nous avons construit un serveur web natif en Node.js pour comprendre son fonctionnement asynchrone et non-bloquant. Nous avons également mentionné que, pour des applications complexes, nous allions nous appuyer sur des frameworks et un vaste écosystème d'outils. Avant de nous lancer dans la création de notre application NestJS, il nous manque une compétence transversale fondamentale : la maîtrise de notre gestionnaire de paquets.
Imaginez que vous deviez construire une maison. Allez-vous forger vos propres clous, scier vos propres planches et fabriquer votre propre ciment ? Probablement pas. Vous allez vous rendre dans un magasin de bricolage pour acheter des matériaux prêts à l'emploi. En développement web, c'est exactement la même chose.
Plutôt que de tout coder vous-même de zéro (comme gérer la sécurité, la connexion à une base de données ou la validation de données), vous allez utiliser des morceaux de code déjà écrits, testés et maintenus par la communauté des développeurs. Ces morceaux de code s'appellent des paquets, ou bibliothèques.
Pour gérer tout cela, nous utilisonsnpm(Node Package Manager). C'est le gestionnaire de paquets officiel de Node.js. Concrètement,npmest deux choses :
Un immense registre public en ligne (npmjs.com), qui agit comme notre grand bibliothèque.
Un outil en ligne de commande, installé automatiquement sur votre machine en même temps que Node.js.
Pour vérifier que tout est bien en place sur votre machine, ouvrez votre terminal et tapez les commandes suivantes :
node -v
npm -vPour mieux comprendre, regardons cela de plus près dans cette courte vidéo. Vous y verrez concrètement ce qui se passe lorsque l’on exécute les commandesnode -vetnpm -v.
Ces commandes vous renverront les numéros de version installés. Si des numéros s'affichent, félicitations, votre environnement est prêt ! Maintenant que nous avons accès à ce supermarché d'outils, voyons comment notre projet garde la trace de ses achats.
Comment un projet Node.js sait-il de quels paquets il a besoin pour fonctionner ? Tout se passe dans un fichier central nommépackage.json.
Voyez lepackage.jsoncomme la carte d'identité de votre projet. C'est un fichier de configuration situé à la racine de votre dossier, qui liste les métadonnées (le nom de votre application, sa version, son auteur) et, surtout, toutes ses dépendances.
Voici à quoi ressemble la structure d'unpackage.jsontypique dans un projet NestJS :
{
"name": "task-manager-api",
"version": "1.0.0",
"scripts": {
"start": "nest start",
"test": "jest"
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"reflect-metadata": "^0.1.13"
},
"devDependencies": {
"typescript": "^5.1.3",
"eslint": "^8.42.0"
}
}Mais pourquoi séparer les dépendances en deux catégories distinctes,dependenciesetdevDependencies?
C'est une excellente question, et la réponse tient en deux mots : performance et sécurité.
Lesdependenciessont les paquets dont votre application a absolument besoin pour fonctionner en production (sur le serveur final), comme le framework NestJS lui-même.
LesdevDependenciessont des outils qui ne vous servent que pendant la phase de développement sur votre ordinateur, comme TypeScript pour vérifier votre code, ou ESLint pour formater vos fichiers. Le serveur de production n'en aura pas besoin, ce qui permet d'alléger le déploiement final.
La théorie c'est bien, mais concrètement, comment récupérer ces paquets ? Tout se passe dans votre terminal avec la commandenpm install.
Lorsque vous souhaitez ajouter un nouvel outil pour votre application, vous tapeznpm install <nom-du-paquet>(par exemplenpm install express). Si vous souhaitez ajouter un outil réservé au développement, vous ajoutez un drapeau spécifique :npm install <nom-du-paquet> --save-dev.
Dès que vous lancez cette commande,npmva faire trois choses automatiquement :
Télécharger le code du paquet depuis internet.
Le placer dans un nouveau dossier nomménode_modulesà la racine de votre projet.
Mettre à jour votre fichierpackage.jsonpour y inscrire la dépendance.
Passons maintenant à la pratique : dans ce screencast, vous allez découvrir les commandes essentielles à connaître au quotidien pour installer des dépendances, différencier les outils de développement, et remettre en état un projet existant après un clonage.
Vous connaissez maintenant les commandes npm indispensables pour gérer les dépendances de vos projets. Avecnpm install, vous pouvez installer ou restaurer un projet en quelques secondes, et grâce à l’option--save-dev, vous savez organiser proprement vos outils de développement.
C’est ce socle simple qui vous permettra de travailler efficacement sur tous vos projets Node.js.
Vos paquets sont installés, il est temps d'apprendre à interagir avec votre projet via les scripts.
Nous avons vu que le fichierpackage.jsoncontient une section nomméescripts. C'est l'un des outils les plus puissants à votre disposition pour simplifier votre quotidien de développeur.
La sectionscriptsvous permet de définir des commandes personnalisées pour automatiser les tâches répétitives de votre projet. Au lieu de taper de longues commandes complexes dans le terminal, vous créez un raccourci simple.
Pour exécuter un script défini dans votrepackage.json, il suffit d'utiliser la syntaxenpm run <nom-du-script>.
Dans un projet NestJS, vous retrouverez toujours les mêmes scripts standards :
npm run start: pour démarrer le serveur.
npm run start:dev: pour démarrer le serveur en mode développement (qui redémarre automatiquement à chaque modification de fichier).
npm run build: pour compiler le projet avant de le mettre en production.
npm run test: pour lancer les tests automatisés.
Ces scripts permettent de standardiser les commandes au sein d'une équipe. Peu importent les outils utilisés en coulisse, un nouveau développeur saura toujours qu'il doit tapernpm run start:devpour lancer le projet localement.
Maintenant que vous comprenez la mécanique de npm, il est temps de mettre les mains dans le code de notre application.
npm est le gestionnaire de paquets de Node.js, il permet d'installer et de gérer des bibliothèques tierces.
Le fichier package.json centralise la configuration du projet et la liste de ses dépendances.
On distingue dependencies (pour la production) et devDependencies (pour le développement uniquement).
Le fichier package-lock.json garantit la cohérence des versions entre tous les membres d'une équipe.
Les scripts npm permettent de standardiser et de raccourcir les commandes récurrentes du projet comme le démarrage ou les tests.
Vous maîtrisez désormais la gestion de vos dépendances, ce qui est essentiel pour tout développeur Node.js. Dans le prochain chapitre, nous allons entrer dans le vif du sujet en découvrant enfin les concepts fondamentaux du framework NestJS pour structurer notre application !