Registry NPM Local avec Verdaccio

Vous avez surement entendu parler de l’incident ayant entrainé la création du gestionnaire de dépendances Yarn.

En effet, la lib leftpad a provoqué des dégâts en 2016 lors de sa suppression, tel un château de cartes, de nombreuses projets utilisant cette dépendance se sont retrouvées en défaut de compilation dont ceux de géants comme Facebook et Spotify.

Ce problème de maitrise des dépendances a en partie entrainé la création de Yarn, un autre gestionnaire de dépendances pour le monde JavaScript, et a aussi donné naissance à des nouvelles fonctionnalités de gestion des dépendances dans NPM v3.

Gestion des dépendances

Dans ce but de maitrise des dépendances, j’ai récemment fait une étude pour mon projet actuel dans le but d’installer un registry NPM local à l’entreprise dans laquelle je travaille.

Après une recherche sur l’état de l’art, j’ai passé en revue différents registry locaux plus ou moins buggés (local-npm) ou abandonnés (sinopia) pour enfin me tourner vers Verdaccio qui répondait à nos besoins.

Objectifs de Verdaccio

Verdaccio est un registry npm local servant de proxy avec le registry npm principal. Celui-ci s’installe sur le réseau local de votre entreprise, au plus proche des développeurs et de l’Intégration Continue.
Il s’intercale entre le registry classique et votre npm pour enregistrer les lib dans un registry plus proche de vous.

Ses avantages sont :
– Économiser de la bande passante en effectuant des requêtes HTTP locales
– Maitriser vos dépendances en gardant près de vos projets les lib utilisées par ceux-ci
– Publier vos projets privés sur un registry inaccessible depuis l’extérieur si vous ne souhaitez pas divulguer vos sources

Comme un registry normal, Verdaccio peut aussi stocker et mettre à disposition vos projets JavaScript pour les redistribuer ensuite dans son réseau local.
Nous avons utilisé cette fonctionnalité pour un projet JS utile à notre projet. La politique de confidentialité nous interdisant de distribuer ce code source sur internet, nous l’avons uploadé sur Verdaccio. Ce code s’est retrouvé donc disponible pour n’importe quel projet au sein du réseau local de l’entreprise et listé dans l’interface du registry.

Fonctionnement

Pour comprendre son fonctionnement, voyons d’abord le processus classique de npm pour récupérer une dépendance :
1) Lancement d’un ‘npm install’ sur un PC client
2) Demande au registry classique d’une lib inexistante sur le client, à travers une requête HTTP
3) Si la lib existe, le registry la renvoie
4) Le npm du client enregistre cette lib dans un cache et la met à disposition du projet

Bien évidemment, si la lib était présente dans le cache npm du client, la requête HTTP n’aurait pas eu lieu.

Voyons maintenant le fonctionnement de npm avec Verdaccio comme registry :
1) Lancement d’un ‘npm install’ sur un PC client
2) Demande au registry Verdaccio d’une lib inexistante sur le client, à travers une requête HTTP
3a) Si la lib existe, Verdaccio renvoie cette lib
3b) Si la lib n’existe pas, Verdaccio demande cette lib au registry classique et la renvoie au client
4) Le npm du client enregistre cette lib dans un cache et la met à disposition du projet

Retour d’expérience

Docker :
La mise en place de Verdaccio a été plutôt simple grâce à sa version dockerisée. Prévoir d’extraire du docker le dossier de stockage des dépendances téléchargées pour les sauvegarder régulièrement.

PC dev :
L’utilisation de Verdaccio comme nouveau registry sur les postes de développement et l’IC a été rapide grâce à la commande : npm set registry http://ADRESSE_VERDACCIO:4873
Un retour en arrière vers le registry classique est facilement réalisable en supprimant la ligne ajoutée par cette commande dans le .npmrc

Temps :
Le temps de build sur un nouveau PC n’est pas plus rapide, les requêtes HTTP vers le registry classique étant plutôt rapides, ceci pouvant varier d’une entreprise à l’autre selon la présence de proxy.

Bande passante :
Nous utilisons docker pour lancer nos tests au sein de Job Jenkins. Ainsi, lors de chaque build, avant d’exécuter les tests, notre soft est recréé entièrement et ses dépendances récupérées depuis le registry.
Le gain en bande passante dans ce cas est non négligeable.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.