Practical Programming
Pile de cartons divers sensé représenter npm, le gestionnaire de paquets pour node.js

npm : Tout comprendre du gestionnaire de paquets Node JS

npm est le gestionnaire de paquets officiel de Node.js. Sa maîtrise est obligatoire pour tout développeur voulant travailler dans cet environnement car il est présent à toutes les étapes de la création, du développement et de la maintenance des applications Node.js.

Logo NPM

Dans le présent guide, PracticalProgramming vous donne toutes les clés pour tout comprendre de npm : qu’est-ce que c’est exactement, comment l’installer et l’utiliser pour installer des paquets etc.

Qu’est-ce que npm ?

En programmation, on dit souvent qu’il ne faut pas réinventer la roue sur chaque projet. En effet, la plupart des fonctionnalités que vous voulez intégrer dans votre projet ont sûrement déjà été développées et testées par d’autres avant vous. Grâce à la puissance de la communauté open-source, vous pouvez télécharger le code de ces fonctionnalités et les installer dans votre projet en tant que dépendances pour pouvoir les réutiliser. 

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

Il existe de nombreux gestionnaires de paquets, chacun dédié à un langage ou à un framework particulier : Maven (JAVA), Bundler (Ruby), Composer (PHP)… 

Avec plus d’un million de paquets disponibles gratuitement et plus de 11 millions d’utilisateurs, npm est le gestionnaire de paquets le plus utilisé dans le monde.

A l’origine, son nom était probablement un acronyme pour “Node Package Manager” mais la société qui gère la bibliothèque (npm, Inc.) a toujours contredit cette affirmation, probablement en raison de possibles litiges juridiques autour du nom “Node”. 

Dédié à tout l’environnement JavaScript et non pas seulement aux paquets Node.js, npm est d’une grande utilité pour les développeurs

Quelle utilité pour npm ?

Pour les développeurs et les entreprises, npm est si utile et pratique qu’il est devenu indispensable

Gestion des dépendances et interface en ligne de commandes

D’abord, il automatise toute la gestion des dépendances et des paquets des projets JavaScript. Plus besoin de télécharger, installer et mettre à jour régulièrement les codes sources des différents paquets (modules, librairies, frameworks etc.) dont votre projet est dépendant. 

Toutes les dépendances seront listées dans un fichier package.json et toutes leurs sources seront disponibles dans un dossier /node_modules/ présent à la racine de votre projet. Cela donne par la même occasion une structure commune à tous les projets, facilitant le travail collaboratif entre plusieurs développeurs. Il vous suffira alors (à vous ou à n’importe quel collaborateur travaillant sur votre projet) de lancer une commande npm install pour installer toutes les dépendances du projet ou npm update pour les mettre à jour. 

Au-delà de ces installations locales, npm permet aussi d’installer globalement des paquets, c’est à dire les rendre disponibles en tant que ligne de commande sur votre système pour être utilisés par d’autres projets.

Ces fonctionnalités de gestion des dépendances et d’utilitaire en ligne de commandes font de npm le gestionnaire de paquets préféré des frameworks JavaScript, permettant à leurs utilisateurs d’accéder très facilement aux différentes versions des librairies back-end et front-end.

Au service des entreprises et de l’open-source

npm est également plébiscité par les entreprises qui peuvent y créer des packages privés et ainsi rendre disponibles certains modules réutilisables à leurs équipes uniquement. 

Enfin, npm a une utilité indiscutable pour l’open-source en proposant gratuitement à la communauté une plateforme fiable (le registre disponible sur npmjs.com) pour mettre à disposition du code open-source et un outil ultra-facile pour l’installer, le mettre à jour etc. 

C’est pourquoi des solutions telles que git et npm sont au centre du développement de nombreuses solutions open-source extrêmement populaires.

Exemples d’utilisation de npm

Si l’écosystème JavaScript s’étend et se démocratise à vitesse grand V, c’est en partie grâce aux possibilités qu’offrent Node.js et npm ; et les exemples ne manquent pas pour le démontrer. 

Express.js, l’infrastructure web simple et flexible pour Node.js

npm page express

Express est le framework serveur de référence pour les applications web Node.js. Cette infrastructure légère et flexible propose un ensemble de fonctionnalités robustes permettant d’organiser son projet avec une architecture MVC (modèle-vue-contrôleur) en la couplant avec une base de données et un langage de templating ou un framework front-end. Par exemple, Express est le composant back-end du stack MEAN (MongoDB en base de données lien vers MongoDB et AngularJS en front-end). 

Coder un simple serveur d’API REST avec Express.js peut s’avérer 5 à 10 fois plus rapide qu’avec Node.js seul, c’est pourquoi Express.js est l’un des paquets les plus populaires de npm avec plus de 11 millions de téléchargements par semaine et près de 40.000 projets qui en sont dépendants.

Airbnb et les packages privés npm

Airbnb est l’exemple-type d’entreprise utilisant npm pour partager son code entre ses collaborateurs. Pour leur site web, leur application mobile, l’interface des loueurs ou l’interface d’administration des employés, les applications sont découpées en composants React qui sont ensuite partagées à l’ensemble des équipes front-end de l’entreprise via un package npm privé. Une bonne pratique qui souligne l’importance qu’a pris npm dans les workflows de certaines entreprises leaders. 

Tutorial: Comment l’installer et utiliser ses fonctions?

Pour bénéficier des fonctions de gestion de paquets et d’utilitaire en ligne de commandes de npm, il faut commencer par installer npm sur son système

Installer npm automatiquement avec Node.js

Depuis la version 0.6.3 de Node.js, npm est livré par défaut avec Node. Pour l’installer, il suffit donc d’installer Node.js sur votre système. 

La procédure pour installer Node.js dépend de votre système d’exploitation. Consultez nos guides pour : 

Config npm : démarrer son projet avec npm init

Nous en parlions précédemment, la gestion des dépendances se base sur une liste des dépendances située dans un fichier package.json. Pour créer ce fichier, lancez simplement une invite de commande dans le dossier de votre projet et utilisez la commande : 

npm init

Un assistant de configuration sera alors lancé, vous permettant de créer ce fichier package.json initial avec notamment le nom du projet (en minuscules uniquement), son auteur, sa version, une description etc. 

Pour accélérer ce processus en créant un projet avec les paramètres par défaut, vous pouvez utiliser la commande : 

npm init -y

comment savoir la version d’npm installée ?

Pour connaître la version npm installée sur votre système, entrez simplement la commande : 

npm -v

Installer un package node avec npm

Pour installer un paquet, rien de plus simple : rendez vous dans le dossier de votre projet et entrez la commande : 

npm install nom_du_paquet

Vous pouvez également utiliser la forme raccourcie de npm install

npm i nom_du_paquet

Pour installer un package globalement et s’en servir sur sa machine comme ligne de commande (CLI), rajoutez le paramètre -g :

npm i nom_du_paquet -g

Enfin, vous pouvez installer des paquets en tant que devDependencies. Les devDependencies sont les paquets nécessaires pour votre environnement de développement et de test, par opposition aux dépendances normales qui s’appliquent en production. Utilisez alors le paramètre -d : 

npm i nom_du_paquet -d

Les alternatives

Si npm est le gestionnaire de paquets le plus populaire de l’écosystème JavaScript, plusieurs alternatives ont le mérite d’exister.

Yarn, le gestionnaire de paquet made in Facebook

Fin 2016, Facebook a annoncé la disponibilité de Yarn, un gestionnaire de paquets qui se veut rapide, fiable et sécurisé

Lors de l’annonce officielle de son lancement, les ingénieurs de Facebook ont précisé avoir utilisé npm avec succès pendant des années. Cependant, à mesure que le volume de code à partager et le nombre de développeurs avec qui le partager augmentaient, des problèmes de fiabilité, sécurité et performance ont été rencontrés. C’est pourquoi Facebook a créé cette alternative open-source avec la collaboration de Exponent, Google et Tilde.

Si Yarn propose de nouvelles fonctionnalités et un coeur adapté aux très grosses entreprises, il se base tout de même sur le registre de npm. Les paquets disponibles sont donc les mêmes, et Yarn est simplement un autre outil pour installer et gérer les paquets, différent de celui installé nativement avec npm.

Yarn reste donc dépendant du gestionnaire de paquets le plus populaire, dont la suprématie n’est pas sans inconvénients.

Comment un développeur a cassé des milliers de projets avec npm

En Mars 2016, un développeur du nom de Azer Koçulu a retiré plus de 250 de ses paquets du registre de npm. La raison : l’un de ses modules s’appelait “Kik”, le même nom que porte une célèbre application de messagerie instantanée, ce qui a retenu l’attention des avocats de cette dernière qui ont demandé à Azer Koçulu de renommer son module. Après son refus, les avocats ont porté une réclamation à l’administration de npm qui ont retiré le module pour atteinte aux droits de la marque. 

Furieux, Koçulu a alors dépublié tous ses paquets dont le module left-pad composé de 11 lignes de code permettant d’ajouter des 0 ou des espaces devant une chaîne de caractères. 

Le problème, c’est que des milliers de projets dépendaient de ce module dont Node.js ou Babel qui se sont retrouvés inutilisables en l’état pour des millions d’utilisateurs. 

La situation a forcé les dirigeants de npm à restaurer une version précédente du module, qui a par la suite été déprécié, mais l’anecdote est représentative des risques liés à une dépendance trop importante à un seul et même registre.

C’est pourquoi de gros acteurs du marché tels que Google, Amazon ou Microsoft proposent désormais des alternatives pour stocker des paquets privés.

Retrouvez nous

N'hésitez pas à nous suivre sur les différents réseaux sociaux !

Most popular

Most discussed

Share This