Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Node.js
  3. Gestionnaire de paquets npm
Extrait - Node.js Exploitez la puissance de JavaScript côté serveur
Extraits du livre
Node.js Exploitez la puissance de JavaScript côté serveur
1 avis
Revenir à la page d'achat du livre

Gestionnaire de paquets npm

Introduction

L’intérêt de la plate-forme Node est sa grande modularité. Mais justement, comment créer, diffuser, installer et rechercher des modules facilement ? C’est là qu’entre en jeu le gestionnaire de paquets de Node : npm. Il est automatiquement installé avec Node et est donc utilisable sans intervention supplémentaire.

Ce chapitre va donc permettre de comprendre d’abord ce qu’est un paquet, pour ensuite être en mesure de travailler avec. L’objectif est double : vous donner tous les outils pour bien utiliser des paquets qui correspondent à vos besoins, mais aussi être en mesure de créer les vôtres ! Vous trouverez de surcroît une explication sur les normes de versionnage pour être en conformité avec les bonnes pratiques.

1. Qu’est-ce qu’un paquet ?

Il est important de saisir la différence entre un module et un paquet.

Concrètement, un paquet est un dossier contenant des ressources décrites par un fichier package.json. De fait, la plupart des paquets sont des modules, puisque ce sont des bibliothèques qu’il est possible de charger avec la fonction require(). Mais ce n’est pas une obligation : certains paquets contiennent seulement des exécutables.

Pour plus d’informations sur les modules, voir le chapitre Concepts.

2. Exemple d’installation

Illustrons la simplicité...

Recherche du bon paquet

Rien que sur le registre standard npmjs.org, il existe plusieurs dizaines de milliers de paquets. Heureusement, des outils permettent de rechercher ceux qui répondent le mieux à un problème donné et des critères de confiance permettent de départager les différents candidats.

Certains développeurs tiennent à jour des listes de paquets intéressants. Une des plus connues est https://github.com/sindresorhus/awesome-nodejs.

1. Recherche en ligne de commande

La première approche, toujours disponible mais aussi la plus rudimentaire, est d’utiliser la commande npm search <terme>... En voici un exemple :


$ npm search check password hash  
NAME          DESCRIPTION   
AUTHOR         DATE       VERSION KEYWORDS  
hashy         Create, check and update password hashes. 
=julien-f      2014-10-07 0.4.1   password hash  
node-pbkdf2   Wrapper around pbkdf2 to securely and hash and  
check...  =louischatriot 2013-05-15 0.1.1   password secure  
openldap_ssha node versions of openldap compatible ssha password... 
=jmarca        2013-12-04 0.0.4
 

2. Recherche sur npmjs.org

Le site web du registre propose un système de recherche plus utile que la ligne de commande, notamment par son système...

Versionnage

Le versionnage est au cœur du fonctionnement de npm, d’où l’importance de comprendre son principe général. Il est d’ailleurs une bonne pratique dans le monde du développement.

1. Numéro de version

Un paquet peut exister en plusieurs versions (0.2.2 et 0.2.3 par exemple). Chaque version correspond à l’état du paquet à un instant donné.

Pour assurer un suivi des versions cohérent, npm utilise la convention de versionnage sémantique, dont les détails sont disponibles sur http://semver.org/.

Un nom de version se découpe donc ainsi : <majeur>.<ineur>.<patch>.

Tout d’abord, le numéro <patch> est incrémenté quand le paquet reçoit des correctifs, c’est-à-dire des changements mineurs qui n’impactent pas les utilisateurs du paquet en dehors de la correction d’un problème.

Puis, le numéro <mineur> est incrémenté quand le paquet reçoit une nouvelle fonctionnalité mais sans impact sur les fonctionnalités précédentes (elles n’ont donc pas été modifiées).

Enfin, le numéro <majeur> est à son tour incrémenté quand le paquet est modifié en cassant la compatibilité. Cette cassure s’identifie dans l’utilisation du paquet, qui diffère...

Gestion des dépendances

Dès qu’un paquet est utilisé dans un projet, il devient une dépendance. Il est alors nécessaire de la déclarer afin de permettre au programme d’être installé correctement ailleurs que sur le poste courant.

Pour enregistrer les dépendances, il est nécessaire de convertir le projet en paquet (qu’il n’est bien entendu pas obligatoire de publier), c’est-à-dire de créer un fichier package.json.

Cette étape, qui pourrait être fastidieuse, est avantageusement automatisée par la commande npm init qui demande à l’utilisateur de renseigner un certain nombre d’informations :


$ npm init  
name: (mon-projet)  
version: (0.0.0)  
description:  
entry point: (index.js)  
test command:  
git repository:  
keywords:  
author:  
license: (ISC)  
About to write to /home/julien-f/dev/mon-projet/package.json:  
  
{  
  "name": "mon-projet",  
  "version": "0.0.0",  
  "description": "",  
  "main": "index.js",  
  "dependencies": {  
    "bluebird": "ˆ2.0.1"  
  },  
  "scripts": {  
    "test": "echo \"Error: no test specified\" && exit 1"  
  },  
  "author":...

Publication d’un paquet

Dans l’optique de la modularité de Node, il peut être intéressant de publier ses propres paquets sur le registre npmjs.org. Ainsi, il sera possible de déployer facilement le projet partout. De plus, les paquets pourront être réutilisés pour d’autres projets très facilement, par leur concepteur ou par d’autres utilisateurs.

C’est grâce à cet esprit que le registre est si vaste aujourd’hui et compte assez de paquets pour couvrir énormément de besoins.

À l’heure où nous écrivons ces lignes, le projet npm est en train de débuter son modèle commercial, avec un abonnement pour disposer de dépôts privés. De cette façon, il sera possible de publier des paquets en toute confidentialité pour des projets sensibles.

Voici le processus de publication, de la création de comptes jusqu’à la diffusion de paquets.

1. Création d’un compte sur le registre

S’il est possible de consommer de manière anonyme des paquets sur npmjs.org, il devient nécessaire de s’enregistrer pour les publier. Deux options sont envisageables : s’enregistrer directement via la commande npm, ou passer par le site web (http://npmjs.org/). La première solution est la plus triviale :


$ npm adduser  
Username: johndoe  
Password:...

Gestion d’un paquet publié

Une fois la publication effectuée, la vie du paquet est loin d’être terminée. Il va évoluer : mise à jour, modification des mainteneurs, etc.

1. Mise à jour

Comme tous les paquets, le paquet peut être mis à jour. Dans ce cas, il est nécessaire de modifier son numéro de version, présent dans le fichier package.json. Cependant, plutôt que de le réviser manuellement, il est conseillé d’utiliser la commande adaptée :


$ npm version 0.1.2
 

Mais il existe encore une façon de faire plus puissante : la commande version peut prendre en paramètre le numéro de version pour l’incrémenter de manière automatique. Dans ce cas, il n’est plus nécessaire de se rappeler de la version courante, et cela limite fortement les erreurs humaines dans le processus de mise à jour.

Par exemple, si un paquet est en 0.1.2, la commande suivante le passe automatiquement en 0.1.3 :


$ npm version patch
 

Pour passer une version 0.1.2 en 0.2.0 :


$ npm version minor
 

Et pour passer une version 0.1.2 en 1.0.0 :


$ npm version major
 

Si le paquet est dans un dépôt git, npm enregistre en plus le changement et l’étiquette (tag) avec le numéro de version. Le duo npm/git est très utilisé : le processus du projet s’en trouve ainsi simplifié.

2. Ajout des mainteneurs...