Skip to main content

Yarn 2 – die Zukunft der Paketmanager für JavaScript?

Artikel von
Plugin feature

3. April 2020

0 Min. Lesezeit

Was ist Yarn 2?

Yarn 2 ist die neue Version des revolutionären und etablierten npm-Paketmanagers Yarn. Sie bietet Verbesserungen wie Plug’n’Play, eine Plugin-Architektur, Monorepos, eine verbesserte Workspace-Unterstützung und Zero-Installs. Das Community-Repository finden Sie auf GitHub unter: https://github.com/yarnpkg/berry.

Warum brauchten wir eine neue Yarn-Version?

Yarn 2 hakt einige Kästchen auf der Liste der Themen ab, über die Entwicklerinnen und Entwickler bei der Verwaltung von JavaScript-Projekten diskutieren:

Monorepos

Ob Sie ein Fan von Monorepos sind oder nicht: Für ihre Verwaltung benötigen Sie eine gute Auswahl an Toolchains, damit große Projekte und komplexe Workflows erfolgreich und ohne Probleme umgesetzt werden können.

Ein beliebtes Rezept für die Einrichtung eines Monorepos für JavaScript-Projekte ist die Kombination aus Yarn Workspaces (seit Yarn 1 verfügbar) und Lerna als Projektmanager.

Die gute Nachricht bei Yarn 2: Yarn fungiert jetzt sowohl als Paketmanager als auch als Projektmanager und möchte eine umfassende Lösung für die reibungslose Verwaltung von Monorepos bieten.

Plug’n’Play

Was wurde über node_modules noch nicht gesagt? Die neue Yarn-Dokumentation geht ausführlicher auf die Nachteile von node_modules als Ordnerstruktur ein und erläutert, warum wir eine neue Denkweise für die Verwaltung von Abhängigkeiten brauchen.

Die Plug’n’Play-Strategie ist nicht nur der neuen Yarn-Version vorbehalten, sondern wurde bereits zuvor im Ökosystem eingesetzt. Kat Marchán stellte Tink 2019 auf der JSConf EU in ihrem Vortrag vor. Das bedeutet allerdings nicht, dass Tinks Plug’n’Play-Ansatz mit dem von Yarn identisch ist. Es lohnt sich jedoch, daran zu erinnern, dass sich diese Ideen schon seit einiger Zeit mit verschiedenen Experimenten in unserem JavaScript-Ökosystem verbreiten.

Ein interessanter Sicherheitsaspekt bei der Implementierung von Plug’n’Play in Yarn 2:

  • Der lokale Cache-Ordner .yarn/cache wird schreibgeschützt eingebunden. So werden böswillige Versuche verhindert, bereits installierte Pakete im Dateisystem zu verändern.

  • Dank der Funktionsweise von Plug’n’Play in Yarn kann Yarn strenge Prüfungen durchführen. So wird beispielsweise verhindert, dass Pakete auf sogenannte Phantom-Pakete verweisen, die nicht in der Abhängigkeitsliste eines Pakets oder Projekts aufgeführt sind.

Plugins

Vielleicht ist das eher aus der Perspektive von Entwicklern und Maintainerinnen relevant als für Endnutzer, aber dennoch wichtig. Bei der Entwicklung von Yarn 2 mit TypeScript bot sich die Gelegenheit, auch die Komplexität und den Wartungsaufwand des Kerns zu verringern. Dafür wurde eine Plugin-Architektur geschaffen, mit der andere Yarn erweitern können.

Noch mehr Funktionen?

In seiner Ankündigung der Veröffentlichung von Yarn 2 auf dev.to gab Maël Nison viele Einblicke in die Funktionen und möglichen Fallstricke, die Yarn 2 zur richtigen Wahl für künftige JavaScript- und Node.js-Projekte machen. Ich empfehle Ihnen, seinen Beitrag zur Veröffentlichung sowie die offizielle Funktionsübersicht von Yarn zu lesen, um weitere Gründe zu erfahren.

Erste Schritte mit Yarn 2

Yarn setzt auf eine Installationsstrategie pro Repository – oder, wenn Sie so möchten, pro Projekt. Das bedeutet, dass Sie Yarn global installieren können, etwa die erste, klassische Yarn-Version, und anschließend für ein bestimmtes Projekt zu Yarn 2 wechseln können.

Für die ersten Schritte mit Yarn 2 benötigen Sie eine aktuelle Node.js-Version, mindestens Node.js 10. In jedem Fall sollte Node.js LTS Ihre bevorzugte Version sein, da sie unterstützt und gewartet wird. Node.js-Versionen vor Version 10 werden nicht mehr unterstützt und erhalten daher weder Fehlerbehebungen noch Sicherheitsupdates.

Zur neuen Yarn-Version wechseln

Erstellen Sie zunächst ein neues Verzeichnis, um ein neues Projekt zu initialisieren:

mkdir my-app
cd my-app

Ermitteln wir mit yarn --version Ihre aktuelle Yarn-Version. Wenn Sie eine Yarn-Version unter 1.22 verwenden, geben Sie Folgendes ein:

yarn policies set-version berry

Wenn Ihre lokale Yarn-Version 1.22 oder höher ist:

yarn set version berry

Dadurch sollte Yarn 2 heruntergeladen und folgende Ausgabe angezeigt werden:

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!

Anschließend können Sie Ihre Yarn-Version mit yarn --version überprüfen. Bei mir wird Folgendes angezeigt:

2.0.0-rc.30

Wie üblich empfiehlt es sich, .yarnrc und .yarnrc.yml einzuchecken, damit die Konfiguration im gesamten Repository geteilt wird. Interessant ist hier die Verwendung des Ordners .yarn, in dem Yarn den Cache, die Yarn-Laufzeitumgebung, Plugins und weitere Daten verwaltet.

Wenn Sie die Richtlinie für Yarn 2 aktualisieren, wird eine Kopie der neuesten Version in den lokalen Ordner .yarn/ heruntergeladen und eine .yarnrc erstellt, in der der Speicherpfad der installierten Version festgehalten wird.

npm-Module in Yarn 2 installieren

Fügen wir das Node.js-Webframework Fastify zu unseren Abhängigkeiten hinzu:

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

In der neuen Yarn-Ausgabe sind bereits einige Änderungen zu sehen:

  1. Zusammengehörige Aufgaben, die während des Installationsvorgangs anfallen, werden jeweils gruppiert.

  2. Yarn verweist in der CLI-Ausgabe auf jede Aufgabengruppe. So können Sie Probleme leichter beheben.

Die Lock-Datei ist nach wie vor die bevorzugte Methode, mit der Yarn Abhängigkeiten für wiederholbare und überprüfbare Versionen festschreibt. Neu in Yarn 2 ist jedoch, dass sie jetzt eine korrekte YAML-Syntax verwendet.

Die gängigen Befehle für die Paketverwaltung sind gegenüber früheren Yarn-Versionen unverändert:

  • yarn add [package] --dev

  • yarn remove [package]

  • yarn up [package]

JavaScript oder Node.js mit Yarn ausführen

Da es kein node_modules-Verzeichnis mehr gibt, funktioniert das Ausführen eines einmaligen Skripts wie node script.js nicht mehr: Die darin angegebenen Abhängigkeiten können nicht aufgelöst werden. Deshalb müssen Sie yarn node script.js ausführen. Dabei startet Yarn den Node-Prozess mit einer eigenen Datei, die Teile der Logik anpasst und so die PnP-Magie ermöglicht. Dafür wird das integrierte CLI-Flag --require von Node verwendet.

Beachten Sie außerdem, dass yarn node in Skripten, die im Feld scripts definiert sind, nicht erforderlich ist (so werden ohnehin viele Tools aufgerufen). Es reicht, einfach node aufzurufen. Danke, Mael, für die Klarstellung!

Wie geht es weiter?

Yarn 2 muss sich noch bewähren und von der Community geprüft werden. Erst dann wird sich zeigen, ob es sich langfristig behauptet und für die neuen Ideen, die es umsetzt und weiterentwickelt, Anerkennung in der JavaScript-Community findet.

Wenn Sie Yarn in Ihrem nächsten Projekt ausprobieren, finden Sie die ausführliche Dokumentation auf der Yarn-Website unter https://yarnpkg.com/cli/install.

Starten Sie mit Capture-the-Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.

Gepostet in:

Weiterlesen

Blog

Stadium-Sommer: Die Snyk Connect Fan Zone Tour

Die Fan Zone Tour von Snyk brachte KI-Security-Workshops, Networking und freundschaftlichen Wettbewerb in 8 Städte und 3 virtuelle Sessions. Die Teilnehmenden bauten ihre Kompetenzen aus, tauschten Ideen aus und entwickelten sich gemeinsam weiter.

Blog

Snyk VulnBench JS 1.0: Finden LLMs zweimal dieselben Fehler?

Snyk VulnBench JS 1.0: 300 wiederholte Scans zeigen, dass LLM-Sicherheitsergebnisse von Durchlauf zu Durchlauf variieren, während SAST und Modelle unterschiedliche Sicherheitslücken aufdecken.

feature insights context
Blog

KI-Sicherheit gemeinsam mit unseren Kunden gestalten: 5 Erkenntnisse aus dem Design-Partner-Programm von Evo

Lernen Sie 5 wichtige Erkenntnisse aus Snyks Design-Partner-Programm für Evo kennen. Erfahren Sie, wie KI-Erkennung, Risikoanalyse und automatisierte Richtlinien Teams dabei helfen, generative KI abzusichern und die Ausbreitung von KI-Anwendungen im großen Maßstab zu steuern.