Yarn est l'un des principaux gestionnaires de paquets JavaScript, développé en 2016 par Sebastian McKenzie de Meta (anciennement Facebook) pour l'environnement d'exécution JavaScript Node.js. Alternative au gestionnaire de paquets npm, Yarn a été créé dans le cadre d'une collaboration entre Facebook (aujourd'hui Meta), Exponent (aujourd'hui Expo.dev), Google et Tilde (la société derrière Ember.js) afin de résoudre les problèmes de cohérence, de sécurité et de performance liés aux grandes bases de code.Aujourd'hui, après plus d'un an de travail, la première version de la ligne de publication 4.x peut enfin posséder l'étiquette "stable"! Pour fêter cela, l'équipe de Yarn nous offre un tour d'horizon des principaux changements. Si vous souhaitez une liste plus détaillée, jetez un coup d'œil au journal des modifications.
Changements majeurs
Voici ce que vous devez savoir lorsque vous mettez à jour des projets 3.x :
- On a maintenant besoin de Node.js 18+.
- Les nouveaux projets créés avec yarn init n'activeront plus Zero-Install par défaut.
- Les nouveaux projets créés avec yarn init utiliseront Corepack plutôt que yarnPath.
- Tous les plugins officiels (typescript, interactive-tools, ...) sont maintenant inclus par défaut.
- La commande yarn workspaces foreach a une syntaxe légèrement modifiée.
Installation de Yarn
Depuis la version 2.0, il est recommandé d'installer Yarn par projet en utilisant le paramètre yarnPath (défini automatiquement par yarn init -2 et yarn set version). L'équipe de Yarn ne publie volontairement pas de versions modernes sur le paquet npm yarn, afin de ne pas casser les projets plus anciens qui n'ont pas encore migré.
À cette fin, il était habituel de recommander l'utilisation du paramètre yarnPath pointant vers un binaire vérifié, mais ce modèle a augmenté les frictions plus qu'ils ne le souhaitaient - de nombreuses personnes n'aimaient pas l'idée d'ajouter un binaire à leur référentiel, même s'il était petit. Ils ont écouté et travaillé conjointement avec Node.js sur un projet appelé Corepack. Corepack est un outil livré avec Node.js 16+ qui sélectionnera automatiquement la bonne version du gestionnaire de paquets à exécuter en fonction du projet sur lequel vous travaillez.
Maintenant que Corepack est livré avec Node 18 et 20, il n'est plus besoin de s'appuyer sur yarnPath, et l'équipe de Yarn a donc mis à jour son guide d'installation pour le refléter. Les commandes yarn init -2 et yarn set version ont été mises à jour pour favoriser la mise à jour du champ packageManager lorsque cela est possible.
INFO
Corepack sait quelle version du gestionnaire de paquets utiliser grâce au champ standard packageManager dans votre package.json. Ce champ sera typiquement défini par l'une des commandes suivantes : yarn init -2, yarn set version x.y.z, ou la commande plus générique corepack use yarn@x.y.z.
Corepack sait quelle version du gestionnaire de paquets utiliser grâce au champ standard packageManager dans votre package.json. Ce champ sera typiquement défini par l'une des commandes suivantes : yarn init -2, yarn set version x.y.z, ou la commande plus générique corepack use yarn@x.y.z.
Yarn tente de vous protéger contre les attaques courantes, et ceci est poussé encore plus loin par l'introduction du mode renforcé. Lorsqu'il fonctionne dans ce mode, Yarn effectue deux validations supplémentaires :
- Il validera que les résolutions stockées dans le fichier de verrouillage sont cohérentes avec ce que les plages pourraient résoudre.
- Il validera que les métadonnées du paquetage stockées dans le fichier de verrouillage sont cohérentes avec les métadonnées du registre distant.
Ensemble, ces vérifications empêcheront tout attaquant de modifier subrepticement vos fichiers de verrouillage lorsqu'il effectue des PR sur votre projet à l'aide de Yarn.
ASTUCE
Le mode renforcé est activé en activant enableHardenedMode, mais il est aussi automatiquement activé lorsque Yarn détecte qu'il s'exécute au sein d'une pull request GitHub sur un dépôt public. Ceci peut être désactivé en désactivant explicitement enableHardenedMode dans votre fichier yarnrc.
Le mode renforcé est activé en activant enableHardenedMode, mais il est aussi automatiquement activé lorsque Yarn détecte qu'il s'exécute au sein d'une pull request GitHub sur un dépôt public. Ceci peut être désactivé en désactivant explicitement enableHardenedMode dans votre fichier yarnrc.
ATTENTION
Les installations fonctionnant sous les contraintes du Hardened Mode sont significativement plus lentes que d'habitude car elles doivent effectuer de nombreuses requêtes réseau qui seraient ignorées autrement. Nous ne recommandons pas de l'activer par défaut - si vous en avez besoin dans un travail de CI spécifique, activez-le via une variable d'environnement :
Les installations fonctionnant sous les contraintes du Hardened Mode sont significativement plus lentes que d'habitude car elles doivent effectuer de nombreuses requêtes réseau qui seraient ignorées autrement. Nous ne recommandons pas de l'activer par défaut - si vous en avez besoin dans un travail de CI spécifique, activez-le via une variable d'environnement :
| Code : | Sélectionner tout |
export YARN_ENABLE_HARDENED_MODE=1
Yarn est le seul gestionnaire de paquets à implémenter un moteur de contraintes. Si vous ne le savez pas, cette fonctionnalité vous permet de définir un ensemble de règles que votre projet doit respecter. Par exemple, le dépôt Yarn impose qu'aucun espace de travail ne dépende de versions différentes d'une dépendance donnée, à moins que cela ne soit explicitement autorisé.
Le moteur de contraintes était alimenté par Tau-Prolog, une implémentation JavaScript de Prolog. Contrairement aux langages impératifs comme JavaScript, Prolog utilise un modèle différent appelé programmation logique - vous définissez que quelque chose existe si une règle est vraie. Il s'agit d'un modèle très intéressant qui s'intègre bien dans le concept de linting basé sur des règles. Malheureusement, Prolog s'est avéré très complexe à utiliser, augmentant la courbe d'apprentissage des contraintes au-delà du seuil avec lequel nous étions à l'aise.
En conséquence, les contraintes Prolog sont dépréciées à partir de Yarn 4, et elles ont été remplacées par un nouveau moteur basé sur JavaScript, avec le support optionnel de TypeScript ! Yarn écrit ses propres...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.