Pour évoluer dans l'univers du développement JavaScript avec Node, les gestionnaires de paquets les plus courants sont :
Le choix parmi ces outils dépend de vos préférences personnelles et des quelques particularités affichées par chacun d'entre eux notamment côté performance. Vous êtes parfaitement libre de changer de gestionnaire de paquets mais si vous collaborez avec d'autres personnes, il vaut mieux harmoniser les pratiques notamment vis-à-vis du fichier de lock (verrou) qui décrit exactement l'arbre des dépendances installées.
Tous utilisent les mêmes concepts, un fichier package.json
à la racine de votre projet qui liste les dépendances et leurs versions, un fichier de lock qui leur est propre, et des commandes d'installation, mise à jour, suppression, exécution de modules ou de scripts, etc.
npm
npm
est le gestionnaire de paquets historique (depuis 2010), fourni "par défaut" avec Node. C'est le plus connu, et souvent celui avec lequel on trouve le plus d'exemples dans les documentations et tutoriels. Il fonctionne en ligne de commande et télécharge les dépendances d'un projet depuis un registre consultable également depuis le site web www.npmjs.com
La commande la plus connue est certainement install
pour ajouter un paquet à un projet et le mémoriser dans le fichier package.json
: npm install react
par exemple.
npm est lui-même écrit en JavaScript, et son nom ne provient initialement pas de l'abréviation de Node Package Manager qui est désormais adoptée de fait, mais d'un outil bash qui l'a inspiré, lui-même nommé pm abréviation de pkgmakeinst
. Ainsi npm peut signifier new pm ou node pm. Depuis 2020, npm fait partie de GitHub.
Le fichier de lock est package-lock.json
et la commande pour exécuter un paquet dynamiquement est npx
.
yarn
yarn
, développé initialement par Facebook (Meta) en 2016, est un gestionnaire alternatif, conçu dans l'idée d'être plus rapide : il utilise un cache local pour stocker les paquets déjà téléchargés, ce qui permet d'éviter des téléchargements supplémentaires. Il évite également les problèmes de dépendances en garantissant que les paquets sont installés dans un ordre déterminé, ce qui évite les erreurs d'installation en cas de dépendances croisées.
Son nom signifie en quelque sorte pelotte de fil, et devait être initialement kpm
pour kittens package manager (où kittens se traduit par chatons), il a d'ailleurs conservé cette idée dans son logo.
yarn
utilise aussi un algorithme de gestion de versions qui peut détecter les conflits de versions plus rapidement et résoudre les problèmes de dépendance de manière plus efficace que npm. Ses commandes sont cenées être plus intuitives et simples car quelque peu "raccourcies".
Le fichier de lock est yarn.lock
et la commande pour exécuter un paquet dynamiquement est yarn dlx
.
pnpm
pnpm
dont le nom provient de performant npm est encore un autre gestionnaire de paquets pour Node.js qui se concentre, entre autres, sur la performance et l'efficacité en utilisant un système de stockage partagé pour les paquets : une seule copie d'un paquet peut être partagée entre plusieurs projets, réduisant ainsi l'utilisation de l'espace disque.
En réalité, il stocke les paquets dans un espace global et crée des "liens" (hard links) vers eux depuis le dossier node_modules
de chaque projet. Sous Linux ce sont des liens, sous Windows c'est un peu plus particulier et cela passe par des jonctions. On a donc l'impression que le poids de node_modules
est semblable mais en réalité il ne faut que compter l'espace mobilisé dans l'espace global. Par ailleurs il stocke tous les paquets "à plat" au même niveau, et utilise les liens pour créer leur arborescence.
pnpm
se dit 2 fois plus rapides que ses concurrents, il parallélise la recherche de paquets, les téléchargements et les installations : testez-le vous ne serez sûrement pas déçu(e).
Pour utiliser pnpm
à la place de npm, vous devez d'abord l'installer, c'est rapide et simple. On peut même l'installer via npm lui même avec npm install -g pnpm
. Il ne vous reste plus qu'à le remplacer dans vos commandes habituelles, telles que pnpm install
, pnpm update
.
Le fichier de lock est pnpm-lock.yaml
et la commande pour exécuter un paquet dynamiquement est pnpm dlx
.
Commentaires
Pour pnpm, non seulement une seule copie est partagée, mais encore, pour un même package le système prend aussi en compte les changements de versions : s'il y a une ligne de code seulement de changée pnpm fera un lien symbolique ne prenant en compte que cette ligne de code.