Skip to main content

Yarn 2 — l’avenir des gestionnaires de paquets pour JavaScript ?

Écrit par
Plugin feature

3 avril 2020

0 minutes de lecture

Qu’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 :

mkdir my-app
cd my-app

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 :

yarn policies set-version berry

Si votre version locale de Yarn est la version 1.22 ou une version ultérieure :

yarn set version berry

Yarn 2 devrait alors être téléchargé, et vous devriez voir s’afficher le résultat suivant :

Resolving berry to a url...
Downloading https://github.com/yarnpkg/berry/raw/master/packages/berry-cli/bin/berry.js...
Saving it into /private/tmp/my-app/.yarn/releases/yarn-berry.js...
Updating /private/tmp/my-app/.yarnrc...
Done!

Vous pouvez ensuite vérifier votre version de Yarn avec yarn --version. Dans mon cas, le résultat est le suivant :

2.0.0-rc.30

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 :

yarn add fastify

➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed in 2.45s
➤ YN0000: ┌ Fetch step
➤ YN0013: │ string-similarity@npm:4.0.1 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ string_decoder@npm:1.3.0 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ tiny-lru@npm:7.0.2 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ uri-js@npm:4.2.2 can't be found in the cache and will be fetched from the remote registry
➤ YN0013: │ util-deprecate@npm:1.0.2 can't be found in the cache and will be fetched from the remote registry
➤ YN0000: └ Completed in 1.73s
➤ YN0000: ┌ Link step
➤ YN0000: └ Completed in 0.07s
➤ YN0000: Done in 4.26s

Vous pouvez déjà constater quelques changements dans le nouveau résultat affiché par Yarn :

  1. Chaque ensemble de tâches liées exécutées pendant l’installation est regroupé.

  2. 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] --dev

  • yarn 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.

Publié dans:

Lire la suite

Blog

Stadium Summer : la tournée Fan Zone de Snyk Connect

La tournée Fan Zone de Snyk a proposé des ateliers sur la sécurité de l’IA, des occasions de réseauter et une compétition amicale dans 8 villes et lors de 3 sessions virtuelles. Les participants ont développé leurs compétences, échangé des idées et progressé ensemble.

Blog

Snyk VulnBench JS 1.0 : les LLM peuvent-ils détecter deux fois les mêmes bugs ?

Snyk VulnBench JS 1.0 : 300 analyses répétées montrent que les résultats de sécurité des LLM varient d’une exécution à l’autre, tandis que SAST et modèles détectent différentes vulnérabilités.

feature insights context
Blog

Construire la sécurité de l’IA avec nos clients : 5 leçons du programme de partenaires de conception d’Evo

Découvrez 5 leçons clés tirées du programme de partenaires de conception d’Evo de Snyk. Découvrez comment la découverte de l’IA, le renseignement sur les risques et l’automatisation des politiques aident les équipes à sécuriser l’IA générative et à maîtriser la prolifération de l’IA à grande échelle.