Apprendre Node.js : Gestionnaire de Paquets NPM

npm est le gestionnaire de paquets le plus répandu permettant de gérer les dépendances d'un projet Node.

Icône de calendrier
Intermédiaire
7 chapitres

Qu’est-ce que npm ?

Gestionnaire de paquets

En programmation, on dit souvent qu’il ne faut pas « réinventer la roue ».

Pourquoi ? Car la plupart des fonctionnalités que vous voulez intégrer dans vos projets ont sûrement déjà été développées et testées par d’autres avant vous. En plus de ça, des personnes vont même être en charge de les maintenir (évolution / corrections / sécurité).

Et la magie de l’open-source… c’est que vous pourrez télécharger le code de ces fonctionnalités et les installer dans votre projet ; on parle de « paquets » ou « dépendances ».

C’est là qu’interviennent les gestionnaires de paquets : tels d’immenses annuaires, ils listent les paquets disponibles, leurs propres dépendances et permettent de les télécharger, installer, mettre à jour et désinstaller très facilement.

Il existe de nombreux packages managers. Chacun est dédié à un langage ou à un framework particulier :

  • Maven (JAVA)
  • Bundler (Ruby)
  • Composer (PHP)
  • npm ou yarn (JavaScript)
  • pip (Python)
  • Etc.

Dans notre cas, c’est npm qui va nous intéresser.

npm (Node Package Manager) est le gestionnaire de paquets pour JavaScript le plus utilisé dans le monde, il regroupe tous les paquets open-source communautaires pour Node.js mais aussi pour le reste de l’écosystème JavaScript.

Node.js propose par défaut une bibliothèque standard élémentaire (les « Core Modules ») pour de nombreuses tâches courantes. Cependant, pour des besoins spécifiques ou avancés, il est courant d’installer des paquets externes via npm (les « Third-Party Modules »).

Fonctionnement

npm permet de gérer des dépendances via des lignes de commande.

Il automatise la gestion des paquets et de leurs dépendances en installant et mettant à jour lui-même les différents paquets dont dépend notre projet. Ces paquets peuvent être installés :

  • Localement : Indépendamment sur chacun de vos projets
  • Globalement : Afin de les rendre disponibles en tant que ligne de commande pour être utilisés par d’autres projets

Arborescence npm

Pour fonctionner npm travaille avec des fichiers de registre listant les dépendances nécessaires au projet ainsi qu’un dossier stockant le code source des dépendances en question.

📄 package.json : l’annuaire

Il regroupe l’ensemble des dépendances listées pour le projet.

📄 package-lock.json : le snapshot

Ce fichier est généré automatiquement pour toutes les opérations où npm modifie soit le dossier 📁 node_modules ou le fichier 📄 package.json. Il stocke la structure exacte de votre arborescence de dépendances à chaque installation.

📁 node_modules : les sources

Toutes leurs sources spécifiées dans 📄 package.json seront disponibles dans un dossier 📁 node_modules présent à la racine du projet.

Via le terminal, npm permet d’accéder très facilement aux différentes versions des librairies back-end et front-end utilisées.

npmjs : un annuaire pour les dépendances npm

npmjs.com est la plateforme référençant tous les paquets open-source disponibles pour npm. Cette plateforme joue le rôle d’annuaire de référence pour la communauté de développeurs Node.

Les paquets publiés sur npmjs sont gérés par la communauté et sont gratuits.

Les paquets npm (outils, frameworks, bibliothèques…) sont installés en ligne de commande et peuvent être mis à jour facilement et rapidement.

Gérer des paquets avec npm

Les opérations classiques effectuées sur les paquets sont l’installation, la mise à jour et la suppression.

Initialiser le fichier de registre package.json

Tout projet Node.js commence avec la création du fichier de registre 📄 package.json qui va permettre de gérer les dépendances futures du projet.

Taper la commande suivante :

copié !
npm init

Décrivez votre projet en répondant aux questions de l’assistant de configuration :

  • Nom du projet (en minuscules)
  • Version
  • Description
  • Repository git
  • Mots clés
  • Auteur
  • Licence

Cette commande génère un fichier 📄 package.json vierge, dans lequel seront enregistrés les détails de tous les packages npm utilisés dans un projet.

{
	"name": "nom-projet",
	"version": "1.0.0",
	"description": "",
	"main": "index.js",
	"scripts": {
		"test": "echo \"Error: no test specified\" && exit 1",
		"start": "node server"
	},
	"keywords": [],
	"author": "",
	"license": "ISC"
}
La clé main

La clé "main" définit le nom du fichier principal de l’application. Il s’agit généralement du point d’entrée principal de l’application, contenant le code qui démarre l’application (le serveur).

La clé scripts

La clé "scripts" définit les scripts qui peuvent être exécutés pour le projet en utilisant la commande npm run. Les scripts définis dans la clé "scripts" peuvent être utilisés pour effectuer diverses tâches, telles que la compilation du code, les tests, le déploiement, etc.

Deux scripts sont initialisés par défaut :

{
	// ...
	"scripts": {
		"test": "echo \"Error: no test specified\" && exit 1",
		"start": "node server.js"
	}
},
  • La commande npm run test affichera le message d’erreur "Error: no test specified" dans la console et quittera avec un code d’erreur 1, signifiant qu’une erreur s’est produite.
  • La commande npm run start exécutera le code JavaScript du fichier 📄 server.js.

Installer un paquet

Pour installer un paquet Node, on exécute la commande npm install, mais cette commande présente certaines options en fonction des paramètres d’installation souhaités.

Installation locale

copié !
npm install <nom_paquet>

Certains paquets vont être nécessaires pour votre environnement de développement et de test, mais pas en production (task runner, webpack…). Il faudra alors préciser le flag --save-dev ou -d sur ceux-ci :

copié !
npm install <nom_paquet> --save-dev
copié !
npm install <nom_paquet> -d

Installation globale

L’option -g de npm permet d’installer un package Node.js de manière globale, le rendant disponible en tant que commande dans tout le système.

copié !
npm install <nom_paquet> -g

Installation d’une version spécifique

Par défaut, la dernière version du package est téléchargée, mais il est possible d’en spécifier une version particulière avec la ligne de commande :

copié !
npm install <nom_paquet>@<version>

Mettre à jour un paquet

Avec le temps, la plupart des paquets maintenus vont évoluer vers de plus récentes versions.

Si vous aviez téléchargé un paquet en v.1.3.7 en début d’année, il est possible que 6 mois plus tard, ce paquet soit en v.1.4.5. Il faudra alors le mettre à jour pour profiter des dernières fonctionnalités, mais aussi des corrections et mises à jour de sécurité.

Pour mettre à jour un paquet Node, on exécute la commande npm update, mais cette commande présente certaines options en fonction des paramètres de mise à jour souhaités.

Mise à jour de tous les packages locaux

copié !
npm update

Mise à jour de tous les packages globaux

copié !
npm update -g

Mise à jour d’un package spécifique

copié !
npm update <nom_paquet>

Supprimer un paquet

Pour supprimer un paquet Node, on exécute la commande npm uninstall, suivi du nom du paquet à supprimer, mais cette commande présente certaines options en fonction des paramètres d’installation souhaités.

Suppression locale

copié !
npm uninstall <nom_paquet>

Si le paquet a été installé en tant que dépendance de développement, il faudra alors préciser le flag --save-dev ou -d :

copié !
npm uninstall <nom_paquet> --save-dev
copié !
npm uninstall <nom_paquet> -d

Suppression globale

copié !
npm uninstall <nom_paquet> -g

Mettre à jour npm

Pour mettre à jour votre version de npm sur Windows, macOS ou Linux, il est possible d’utiliser… npm.

Télécharge la dernière version stable avec @latest
copié !
npm install npm@latest -g
Télécharge la plus récente version avec @next
copié !
npm install npm@next -g
Télécharge une version spécifique avec @{numéro de version}
copié !
npm install [email protected] -g