Der CLI-Output
Die CLI-Outputs in Yarn 2 wurden gründlich überarbeitet. Statt kryptischer Fehlermeldungen bekommt ihr Messages mit Error Codes, nach denen ihr in der Doku suchen könnt. Dort findet ihr Erklärungen inklusive Lösungsvorschlägen dazu. Außerdem wurde die Farbgebung der Fehlermeldungen überarbeitet.
Behaltet den Überblick über eure Workspaces
Mit Yarn 2 könnt ihr über yarn up <name>
ein Package in allen Workspaces eines Projekts gleichzeitig updaten, yarn add -i <name>
lässt euch im gegenwärtigen Workspace die selbe Version einer Dependency zu nutzen, die ihr in den anderen nutzt. Und: Das Version-Plugin bietet einen Weg, um alle Referenzen zu verknüpften Workspaces automatisch zu updaten – in Yarn 1 musste das für jeden Server und jeden Client manuell gemacht werden.
Den Überblick über Änderungen in euren Workspaces und Releases behaltet ihr in Yarn 2 mithilfe des version-plugins, das euch erlaubt, Release-Verantwortlichkeiten an Contributors zu delegieren. Fancy: Das Plugin hat außerdem ein visuelles Interface, das das Workspace-Management vereinfacht.
Achtung: Noch befindet sich die Funktionalität im sogenannten Experimental Mode.
Neue Commands
Yarn 2 hat zwei neue Commands im Gepäck. Erstens ist da yarn dlx
– quasi das Äquivalent zu npx
. Yarn dlx
ist dabei sicherer, da es – anders als npx – ausschließlich Remote Scripts lädt und ausführt. Lokale Scripts lassen sich separat über yarn run
oder einfach über ihren Namen ausführen.
Hinzu kommt yarn workspaces foreach
. In Yarn 1 braucht ihr ein externes Tool, um einen Command über mehrere Repos auszuführen. Yarn 2 bringt nun ein Plugin namens workspace-tools mit, das neben eben dieser Funktionalität außerdem Möglichkeiten bietet, Commands parallel auszuführen, Dependencies zu folgen oder Workspaces zu skippen.
Neue Protokolle – patch: und portal:
Mit patch:
nehmt ihr spezifische Änderungen an Packages innerhalb des Dependency-Trees vor. In Kombination mit dem Resolutions-Field lassen sich auch Pakete patchen, die irgendwo tief im Dependency-Tree verschachtelt sind.
Das portal:
-Protokoll ist quasi das Gegenstück zum link:
-Protokoll. Das link
:-Protokoll könnt ihr nutzen, um Symlinks zu lokalen Ordnern zu erstellen, mit portal:
erstellt ihr in Yarn 2 Symlinks zu allen Package-Foldern. Der Unterschied: Portale folgen transitiven Dependencies, Links nicht.
Workspace Contraints
Auch wenn Workspaces ein tolles Feature von Yarn sind – die Aufrechterhaltung synchronisierter Workspace Dependencies ist aufwändig. Yarn 2 kommt mit einem neuen Konzept namens Constraints. Damit könnt ihr allgemein gültige Regeln für eure Workspaces erstellen – mithilfe von Prolog, einer Programmiersprache aus den 70er-Jahren. Klingt kompliziert? – Ist es wohl auch. Im Blogpost auf dev.to kündigte Nison bereits an, dass er dazu in Kürze weitere Infos veröffentlichen wolle.
Genauere Kontrolle über eure Dependencies
In Yarn 2 werden eure Build-Dependencies getrackt. Außerdem könnt ihr Builds für einzelne Packages ermöglichen.
Verbesserte Windows-Shell-Kompatibilität
Windows-Nutzer hatten in der Vergangenheit öfter Probleme mit dem scripts-field. Für bessere Kompatibilität mit allen Betriebssystemen kommt Yarn 2 mit einem rudimentären Shell-Interpreter. Der soll sicherstellen, dass eure Scripts richtig ausgeführt werden, egal auf welchem OS.
Was ist noch neu?
- Überarbeitete Peer Dependency Links: In Yarn 2 könnt ihr Node über Plug & Play jetzt zwingen, so viele Package-Instanzen wie nötig zu initiieren, um alle Dependencies zu bedienen.
- Neues Lockfile-Format: Anstelle der YAML-ähnlichen Syntax der Lockfiles in Yarn 1 sind in Yarn 2 sowohl die Lockfiles als auch die Konfigurationsdateien in YAML verfasst. Das dürfte vor allem den Erstellern externer Tools die Arbeit erleichtern.
- TypeScript Codebase und modulare Architektur: Die Codebase von Yarn2 wurde komplett von Flow zu TypeScript migriert. Für das Schreiben von Plugins bedeutet das mehr Sicherheit, für das Yarn2-Entwicklerteam einen vereinfachten Workflow. Außerdem ermöglicht es das Schreiben von Plugins, die während der Laufzeit geladen werden.
- Verbesserte Konfigurationspipeline: Die Konfiguration in Yarn 2 wurde komplett überarbeitet – alle Einstellungen findet ihr unter yarnrc.yml. Außerdem wurden deren Benennungen vereinheitlicht, die neuen Namen findet ihr in der Doku.
Was wird aus Yarn 1?
Laut Nisons Blogpost wird Yarn 1 nach der Veröffentlichung von Version 1.22 in den Maintainance-Mode versetzt. Konkret bedeutet das: Er selbst wird keine weiteren Updates an dem Projekt vornehmen, Security-Patches ausgenommen. Neue Features sollen künftig ausschließlich für Yarn 2 entwickelt werden. Das Yarn-1-Repo findet ihr momentan weiterhin unter yarnpkg/yarn, es soll aber – so Nison – nach yarnpkg/legacy verschoben werden. Das Yarn2-Repo ist unter yarnpkg/berry zu finden.
Das Yarn-Package auf npm wird zukünftig mit berry
(Yarn 2), respektive legacy
(Yarn 1) getaggt. Noch ist das Yarn-1-Package mit latest
getaggt, demnächst soll dieser Tag aber zu Yarn 2 wechseln. Nutzer, die nicht zu Yarn 2 migrieren wollen oder können, haben so genug Zeit, ihre Yarn-Versionen zu pinnen. Ab Node 14 – dessen Release im April 2020 erwartet wird – kommt das Node Docker Image wahrscheinlich standardmäßig mit Yarn 2. Wer Yarn 2 vorher schon auf allen Node Images nutzen will, kann das über yarnPath
tun. Einige OS-Register, darunter Chocolatey und Homebrew wurden in Yarn 2 bislang noch nicht implementiert – sie werden das Update wahrscheinlich später als andere Register erhalten. Bis dahin könnt ihr Upgrades über yarn set version
bzw. yarn policies set-version
managen.
Migration zu Yarn 2
Die Migration zu Yarn 2 sollte – vorausgesetzt, ihr nutzt Tools wie Babel, TypeScript, EsLint in jeweils der aktuellsten Version – relativ problemlos verlaufen. Im Migration Guide findet ihr ein HowTo. Aber: Bisher bietet Yarn 2 keine Unterstützung für Flow und React Native. Das dürfte für sehr viele Teams den ausschlaggebenden Grund für einen Verzicht auf das Update darstellen. Auch bei Facebook selbst wird ein Wechsel zu Yarn 2 wohl bislang nicht in Betracht gezogen:
Wer Yarn 2 nur innerhalb mancher Repos nutzen will, kann über den Command yarn policies set-version ^1
festlegen, in welchen Repositiories man bei Yarn1 bleiben will.
t3n meint:
Yarn 1 als Legacy-Version zu betiteln, ist vielleicht ein bisschen verfrüht. Erstens fehlt bei Yarn 2 die Unterstützung für React Native und Flow, und zweitens planen viele Entwickler, unter anderem die Teams bei Facebook, bis auf weiteres bei Version 1 zu bleiben – unter anderem wahrscheinlich eben wegen des fehlenden React- und Flow-Supports.
Kathrin Stoll
Bitte beachte unsere Community-Richtlinien
Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.
Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.
Dein t3n-Team