From NPM to Yarn !

Vous utilisez NPM pour gérer les dépendances de votre projet ? Il est temps de passer à Yarn.

L’impact de la migration de NPM vers Yarn est minimal, et il est très simple de passer de l’un à l’autre. L’essayer c’est l’adopter !

Pourquoi yarn?

Rapidité

Yarn met en cache tous les modules installés, ce qui permet de ne pas avoir à les re-télécharger à chaque fois, et permet d’ajouter des dépendances sans connexion internet si elles sont dans le cache.
De plus, l’installation des modules est parallélisé, petit exemple avec une première installation d’express, qui installe 42 packages au total :

  • NPM: 15 secondes
  • Yarn: 3 secondes

Waw. Le gain en rapidité dépend du nombre de modules installés, mais dans tous les cas, Yarn est plus rapide.

Fiabilité

Si vous avez déjà travaillé avec php et composer, vous avez sûrement remarqué le fichier composer.lock.
Dans le même esprit, Yarn utilise un lockfile, qui est la pour freezer la version installé d’un module. Yarn garantit donc qu’une installation qui fonctionne sur un système fonctionnera de la même façon sur un autre système.

Sécurité

Yarn utilise des checksums pour vérifier l’intégrité de chaque paquet avant que son code soit exécuté.

Passer à Yarn

Installation

Le plus simple est de faire npm install yarn --global MAIS Yarn le déconseille, car NPM ne va pas vérifier l’intégrité du package qu’il installe, et c’est quand même l’une des raisons pour laquelle on veut utiliser Yarn.

Je vous conseille donc d’aller voir la documentation officielle pour l’installation.

Utilisation

Migration

Pour utiliser Yarn au lieu de NPM au sein d’un projet, rien de plus simple, lancez la commande :

yarn

Vous avez maintenant un fichier yarn.lock, qu’il faut bien sûr ajouter à votre système de gestion de versions, sinon il ne servirait à rien !

En parlant de gestion de versions, pensez à ignorer le fichier yarn-error.log, équivalent de npm-debug.log

Les commandes

Même si la plupart des commandes de Yarn sont semblables à celles de NPM, il y a quelques différences.

//Ce qui change
yarn //npm install

yarn add [module] //npm install [module] --save
yarn add [module] --dev //npm install [module] --save-dev
yarn global add [module] //npm install [module] --global

yarn upgrade [module] //npm update --save

yarn remove [module] //npm uninstall [module] --save

// Ce qui ne change pas
yarn init //npm init
yarn link //npm link
yarn outdated //npm outdated
yarn publish //npm publish
yarn run //npm run
yarn cache clean //npm cache clean
yarn test //npm test

//Ce que npm n'a pas
yarn licenses ls //Pour inspecter les licenses des dépendances
yarn licenses generate-disclaimer //Pour générer un "dependecy disclaimer"
yarn why [module] //Permet de savoir pourquoi le module est installé
yarn upgrade-interactive //Pour upgrade des modules en mode interactif

//Ce que Yarn n'a pas, et qui n'est de toute façon pas indispensable
npm xmas
npm visnup

On peut remarquer qu’il n’y a pas moyen d’installer une dépendance sans la sauvegarder, et il n’y a donc pas d’équivalent à la commande npm prune.