Yarn 2 — l’avenir des gestionnaires de paquets pour JavaScript ?
3 avril 2020
0 minutes de lectureQu’est-ce que Yarn 2 ?
Yarn 2 est la nouvelle version du gestionnaire de paquets npm révolutionnaire et bien établi Yarn. Elle apporte des améliorations telles que Plug’n’Play, une architecture de plugins, les monorepos, une meilleure prise en charge des espaces de travail et les installations zéro. Vous trouverez le dépôt de la communauté sur GitHub à l’adresse suivante : https://github.com/yarnpkg/berry.
Pourquoi avions-nous besoin d’une nouvelle version de Yarn ?
Yarn 2 répond à plusieurs enjeux qui alimentent les discussions entre développeurs sur la gestion des projets JavaScript :
Monorepos
Que vous soyez adepte des monorepos ou non, leur gestion nécessite un ensemble d’outils adapté pour garantir la réussite et simplifier la gestion de projets volumineux et de workflows complexes.
Pour configurer un monorepo pour des projets JavaScript, une approche courante consiste à combiner les espaces de travail de Yarn (disponibles depuis Yarn 1) et Lerna, un outil de gestion de projets.
Avec Yarn 2, Yarn fait désormais office à la fois de gestionnaire de paquets et d’outil de gestion de projets, et vise à offrir une expérience complète pour gérer les monorepos en toute simplicité.
Plug’n’Play
Que n’a-t-on pas déjà dit sur node_modules ? La nouvelle documentation Yarn détaille les limites de node_modules en tant que structure de dossiers et explique pourquoi il faut repenser la gestion des dépendances.
La stratégie Plug’n’Play n’est pas propre à la nouvelle version de Yarn : on l’a déjà vue dans l’écosystème. Kat Marchán a présenté Tink à JSConf EU 2019, lors de sa présentation. Cela ne signifie pas pour autant que l’approche Plug’n’Play de Tink est identique à celle de Yarn. Il est toutefois intéressant de rappeler que ces idées se répandent depuis un certain temps, à travers différentes expérimentations dans l’écosystème JavaScript.
Un aspect intéressant de la sécurité dans l’implémentation de Plug’n’Play par Yarn 2 :
Le dossier de cache local .yarn/cache est monté en lecture seule. Il est donc impossible de modifier des paquets déjà installés sur le système de fichiers à des fins malveillantes.
Grâce à la nature de Plug’n’Play dans Yarn, il est possible d’appliquer des contrôles stricts, par exemple en empêchant les paquets de faire référence à des paquets fantômes qui ne figurent pas dans la liste des dépendances d’un paquet ou d’un projet.
Plugins
C’est peut-être un sujet qui concerne davantage les développeurs et les responsables de la maintenance que les utilisateurs finaux, mais il mérite d’être souligné. Le développement de Yarn 2 avec TypeScript a aussi permis de réduire la complexité et la charge de maintenance du cœur de l’outil, grâce à la création d’une architecture de plugins qui permet à d’autres personnes d’étendre Yarn.
Encore plus de fonctionnalités ?
Dans son annonce de la sortie de Yarn 2 sur dev.to, Maël Nison présente en détail les fonctionnalités et les pièges à éviter, qui font de Yarn 2 un choix judicieux pour les futurs projets JavaScript et Node.js. Je vous invite à lire son article sur cette version, ainsi que la page officielle des fonctionnalités de Yarn, pour en savoir plus.
Bien démarrer avec Yarn 2
Yarn a adopté une stratégie d’installation par dépôt — ou par projet, si vous préférez — ce qui vous permet d’installer Yarn une seule fois à l’échelle globale, par exemple la première version, dite classique, puis de passer à Yarn 2 pour un projet spécifique.
Pour commencer avec Yarn 2, vous devez disposer d’une version à jour de Node.js, au minimum Node.js 10. Dans tous les cas, privilégiez toujours une version LTS de Node.js, car elle bénéficie d’une prise en charge et d’une maintenance continues. Les versions de Node.js antérieures à la version 10 ne sont plus prises en charge : elles ne reçoivent donc ni correctifs de bugs ni correctifs de sécurité.
Passer à la nouvelle version de Yarn
Pour commencer, créons un nouveau répertoire afin d’initialiser un nouveau projet :
Vérifions votre version actuelle de Yarn avec yarn --version. Si vous utilisez une version de Yarn antérieure à la version 1.22, saisissez la commande suivante :
Si votre version locale de Yarn est la version 1.22 ou une version ultérieure :
Yarn 2 devrait alors être téléchargé, et vous devriez voir s’afficher le résultat suivant :
Vous pouvez ensuite vérifier votre version de Yarn avec yarn --version. Dans mon cas, le résultat est le suivant :
Comme d’habitude, il est conseillé d’inclure .yarnrc et .yarnrc.yml dans vos commits afin de partager la configuration au sein du dépôt. Notez également l’utilisation du dossier .yarn, où Yarn gère le cache, l’environnement d’exécution, les plugins et d’autres données.
La mise à jour de la configuration pour Yarn 2 télécharge une copie de la dernière version dans le dossier local .yarn/ et crée un fichier .yarnrc qui indique le chemin sur le disque vers la version installée.
Installer des modules npm avec Yarn 2
Ajoutons le framework web Node.js Fastify à nos dépendances :
Vous pouvez déjà constater quelques changements dans le nouveau résultat affiché par Yarn :
Chaque ensemble de tâches liées exécutées pendant l’installation est regroupé.
Yarn fournit une référence pour chaque groupe de tâches dans le résultat de l’interface en ligne de commande. En cas de problème, il est donc plus facile d’en rechercher la cause.
Le fichier de verrouillage reste la méthode privilégiée par Yarn pour épingler les dépendances et obtenir des versions reproductibles et vérifiables. La nouveauté de Yarn 2, c’est qu’il utilise désormais une syntaxe YAML standard.
Les commandes courantes de gestion des paquets sont restées les mêmes que dans les versions précédentes de Yarn :
yarn add [package] --devyarn remove [package]yarn up [package]
Pour exécuter JavaScript ou Node.js, il faut Yarn
Comme le répertoire node_modules n’existe plus, l’exécution d’un script ponctuel tel que node script.js ne fonctionnera pas, car les dépendances indiquées dans ce fichier ne pourront pas être résolues. Vous devez donc exécuter yarn node script.js : Yarn lancera alors le processus Node avec son propre fichier, qui modifie une partie de la logique pour permettre la magie de PnP. Pour cela, il utilise l’option intégrée à Node --require.
Notez également que yarn node n’est pas nécessaire dans les scripts définis dans le champ scripts (c’est d’ailleurs ainsi que beaucoup d’outils sont exécutés) : il suffit d’appeler node. Merci à Mael pour cette précision !
Et ensuite ?
Yarn 2 doit encore faire ses preuves et être évalué par la communauté pour démontrer sa durabilité et obtenir la reconnaissance de la communauté JavaScript pour les idées novatrices qu’il met en œuvre et développe.
Pour en savoir plus, consultez la documentation détaillée sur le site de Yarn à l’adresse https://yarnpkg.com/cli/install et essayez Yarn 2 dans votre prochain projet.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.



