Yarn 4.0 est disponible : l'installation de Yarn n'a plus besoin de yarnpath, un mode renforc� a �t� introduit pour plus de s�curit� et les plugins officiels sont maintenant inclus par d�faut.
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.
Mode renforc�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 [email protected].
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.Contraintes JavaScriptATTENTION
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 - Visualiser dans une fen�tre � part 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 r�gles chez Datadog avec ce framework depuis quelques mois maintenant, avec beaucoup de succ�s. Vous pouvez �galement consulter le d�p�t public Yarn pour un exemple pratique du type de r�gles que vous pouvez appliquer au niveau du d�p�t, et la documentation r�cemment remani�e est l� pour vous aider � vous familiariser rapidement avec le syst�me.
Int�gration de TypeScript, outils interactifs, ...ASTUCE
Le nouveau param�tre optionnel enableConstraintsChecks permet � Yarn d'ex�cuter vos contraintes dans le cadre de Yarn install. C'est un moyen pratique de faire remonter les erreurs avant d'avoir � attendre que le CI distant les soul�ve, et puisque le nouveau moteur est si rapide, il n'a presque aucun impact sur votre temps d'installation
Diverses fonctionnalit�s de Yarn �taient livr�es sous forme de plugins sideload�s qui devaient �tre g�r�s s�par�ment du bundle principal. Bien que cela nous ait aid� � construire un �cosyst�me de plugins, cela s'est av�r� difficile � g�rer pour nos utilisateurs. Nous avons impl�ment� quelques fonctionnalit�s pour rendre cela plus facile (mise � jour automatique des plugins lors de la mise � jour automatique de Yarn), mais au final, les quelques KiBs que nous avons gagn�s en ne livrant pas toutes les fonctionnalit�s par d�faut ne valaient pas la confusion et les frictions qu'elles ont caus�es.
En cons�quence, bien que Yarn supporte toujours les plugins tiers (et continuera � le faire dans le futur), toutes les fonctionnalit�s et commandes que nous construisons sont maintenant disponibles dans la distribution principale. Vous pouvez maintenant utiliser yarn upgrade-interactive et yarn stage sans plugins et, si vous avez configur� TypeScript dans votre projet, Yarn ajoutera et supprimera automatiquement les paquets @types chaque fois que vous mettrez � jour vos d�pendances avec yarn add et yarn remove.
Interface utilisateur am�lior�e
Plusieurs parties de l'interface utilisateur ont �t� r�organis�es pour mieux transmettre l'information. Par exemple, yarn install vous indique maintenant les paquets que vous avez ajout�s, et leur poids total. Vous remarquerez �galement qu'il n'affiche plus autant d'avertissements concernant les d�pendances des pairs, car nous essayons maintenant de n'afficher des avertissements que dans les situations o� il est possible d'agir :
Un autre exemple est la commande yarn config, qui propose un nouvel affichage arborescent et accepte d�sormais un nombre arbitraire de param�tres en tant qu'arguments positionnels, vous permettant de s�lectionner ce que vous souhaitez voir :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 ➤ YN0000: · Yarn 4.0.0 ➤ YN0000: ┌ Resolution step ➤ YN0085: │ + next@npm:13.5.4, react-dom@npm:18.2.0, and 24 more. ➤ YN0000: └ Completed in 0s 280ms ➤ YN0000: ┌ Fetch step ➤ YN0013: │ 22 packages were added to the project (+ 177.72 MiB). ➤ YN0000: └ Completed in 3s 723ms ➤ YN0000: ┌ Link step ➤ YN0000: └ Completed ➤ YN0000: · Done with warnings in 4s 123ms
Performances
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 ├─ cacheFolder │ ├─ Description: Folder where the cache files must be written │ ├─ Source: │ └─ Value: '/Users/global/.yarn/berry/cache' │ └─ enableHardenedMode ├─ Description: If true, automatically enable --check-resolutions --refresh-lockfile on installs ├─ Source: └─ Value: null
La 4.0 n'est pas en reste en mati�re d'am�lioration des performances, et se montre nettement plus rapide � l'installation que la 3.6. Par exemple, voici la diff�rence de temps pour installer Gatsby et son arbre de d�pendances de ~350MiB � partir d'un cache froid. L'am�lioration de 3x des performances est due � un nouveau cache de m�tadonn�es de paquets qui am�liore significativement les performances des installations r�p�t�es :
Code : S�lectionner tout - Visualiser dans une fen�tre � part hyperfine -L v stable,canary --prepare 'rm -rf ~/.yarn/berry/cache' 'cd $(mktemp -d) && yarn init -2 && yarn set version {v} && yarn && yarn add gatsby --mode=skip-build'Ces changements rendent Yarn aussi rapide que pnpm dans la plupart des sc�narios, bien que la concurrence soit encore f�roce.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 Benchmark 1: 3.6.0 Time (mean ± σ): 65.599 s ± 2.214 s [User: 82.952 s, System: 8.638 s] Range (min max): 62.167 s 68.277 s 10 runs Benchmark 2: 4.0.0 Time (mean ± σ): 16.724 s ± 0.928 s [User: 14.622 s, System: 5.743 s] Range (min max): 15.318 s 18.110 s 10 runs Summary 4.0.0 ran 3.92 ± 0.25 times faster than 3.6.0
Un site web �l�gant
Comme vous l'avez probablement remarqu�, notre site web a b�n�fici� d'une refonte majeure, tant au niveau du style que du contenu ! Nous avons travaill� sur cette nouvelle it�ration pendant plus d'un an, et nous esp�rons qu'elle vous aidera � trouver de meilleures informations, plus rapidement qu'auparavant.
Quelques am�liorations particuli�res :
- Toutes les commandes r�f�renc�es ont maintenant un lien vers leur documentation (yarn install)
- Toutes les options r�f�renc�es ont maintenant une infobulle expliquant leur but (yarn --immutable-cache)
- La plupart des pages ont �t� r��crites pour �tre � la fois simplifi�es et clarifi�es lorsque c'�tait n�cessaire.
- La page des paquets affiche maintenant diverses v�rifications configurables, comme par exemple si un paquet supporte CJS, ESM, a des types, ...
Notre expertise se situe plus dans l'outillage que dans la construction de sites web, donc je suis s�r qu'il reste encore des choses � am�liorer - en particulier en ce qui concerne le temps de chargement. Si vous souhaitez nous aider, consultez les sources et n'h�sitez pas � nous envoyer des PRs !Source : YarnMot de la fin
La transition de Yarn 3 � Yarn 4 a �t� longue, avec pas moins de 53 versions candidates en cours de route, mais nous y sommes finalement parvenus ! Notre objectif pour cette nouvelle it�ration a �t� de r�duire la courbe d'apprentissage de Yarn et d'am�liorer votre exp�rience utilisateur, sans que la migration ne vous paraisse insurmontable. Nous avons fait des efforts concert�s pour �viter de faire des changements importants sans avoir des moyens de migrer automatiquement les projets, donc si vous rencontrez des probl�mes que vous pensez que le logiciel aurait d� r�soudre, partagez vos commentaires avec nous sur Discord.
Pour ce qui est de l'avenir, il est un peu trop t�t pour donner une r�ponse d�finitive, mais je peux vous dire que je suis particuli�rement intrigu� par le potentiel des constructions natives de Yarn. Les performances ont �t� sous les feux de la rampe derni�rement, et je me demande parfois quelle est la part de Node.js dans le temps d'ex�cution global. Ceci �tant dit, nous ne pr�voyons pas d'entreprendre une autre r��criture compl�te de la base de code, et nous ne voulons pas non plus compromettre les facteurs qui rendent Yarn si convivial pour les contributeurs, donc les sp�cificit�s, ainsi que le calendrier, sont encore � l'�tude.
En attendant, nous allons continuer � construire sur nos fondations existantes pour le moment. De l'ach�vement du CLI et des commandes de l'interface utilisateur � la r�duction de la courbe d'apprentissage et � l'entretien g�n�ral, nous avons un large �ventail d'am�liorations en vue. � la prochaine fois !
Et vous ?
Quel est votre avis sur cette nouvelle version de Yarn ?
Voir aussi :
�tat de JavaScript 2022 : React reste le framework front-end dominant mais est en perte de vitesse c�t� satisfaction, JQuery est la troisi�me biblioth�que la plus utilis�e
Facebook annonce la disponibilit� de Yarn, un nouveau gestionnaire de paquets JavaScript � plus rapide, plus fiable � et utilisable hors-ligne
Node.js 20.6 est disponible avec une prise en charge des fichiers de configuration .env et l'int�gration du garbage collector C++ "Oilpan"
Partager