Yarn

Yarn

Copyright © Shutterstock/Rolling Orange

Was ist Yarn?

Yarn ist ein neuer JavaScript-Paketmanager, der von Facebook, Google, Exponent und Tilde erstellt wird.

In der JavaScript-Community teilen Ingenieure Hunderttausende von Code-Teilen, sodass das Umschreiben von Basiskomponenten, Bibliotheken oder Frameworks vermieden werden kann. Jeder Code kann wiederum von anderen Codes abhÀngen und diese AbhÀngigkeiten werden von Paketmanagern verwaltet. Der zuvor beliebteste JavaScript-Paketmanager ist der npm-Client, der Zugriff auf mehr als 300.000 Pakete in der npm-Registrierung bietet.

Der npm-Client wurde seit Jahren erfolgreich bei Facebook eingesetzt, aber als die GrĂ¶ĂŸe des Codebase und die Anzahl der Ingenieure wuchsen, gab es Probleme mit der Konsistenz, Sicherheit und Leistung. Nach dem Versuch fĂŒr jedes Problem eine Lösung zu finden, um die AbhĂ€ngigkeiten zuverlĂ€ssiger verwalten zu können, entwickelten die Ingenieure Yarn – ein schneller, zuverlĂ€ssiger und sicherer alternativer npm-Client.

Mit Yarn haben Ingenieure immer noch Zugriff auf die npm-Registrierung, können jedoch Pakete schneller installieren und AbhÀngigkeiten konsistent auf Computern oder in sicheren Offline-Umgebungen verwalten. Mithilfe von Yarn können sie zudem kurzerhand und zuverlÀssiger vorgehen, wenn sie gemeinsam genutzten Code verwenden, um sich auf das Wesentliche zu konzentrieren: die Entwicklung neuer Produkte und Funktionen.

Entwicklung des JavaScript-Paketmanagements bei Facebook

In den Tagen vor den Paketmanagern war es fĂŒr JavaScript-Ingenieure ĂŒblich, sich auf eine kleine Anzahl von AbhĂ€ngigkeiten zu verlassen, die direkt in ihren Projekten gespeichert waren oder von einem CDN (Content Delivery Network) bedient wurden. Der erste große JavaScript-Paketmanager npm wurde kurz nach der EinfĂŒhrung von Node.js erstellt und entwickelte sich schnell zu einem der beliebtesten Paketmanager der Welt. Tausende neuer Open-Source-Projekte wurden erstellt und die Ingenieure teilten mehr Code als je zuvor.

Viele der Projekte bei Facebook, wie zum Beispiel React, hĂ€ngen vom Code in der npm-Registrierung ab. Bei der internen Skalierung gab es jedoch Probleme mit der Konsistenz bei der Installation von AbhĂ€ngigkeiten zwischen verschiedenen Computern und Benutzern. Eine weitere Problematik sah man in der Zeit, die fĂŒr das Abrufen von AbhĂ€ngigkeiten erforderlich war sowie einige Sicherheitsbedenken hinsichtlich der Art und Weise, wie der npm-Client den Code aus diesen AbhĂ€ngigkeiten automatisch ausfĂŒhrte.

Yarn als neuer Paket-Manager

Yarn ist ein neuer Paket-Manager, der den vorhandenen Workflow fĂŒr den npm-Client oder andere Paketmanager ersetzt und dabei mit der npm-Registrierung kompatibel ist. Es verfĂŒgt ĂŒber die gleichen Funktionen wie bestehende Workflows und arbeitet schneller, sicherer und zuverlĂ€ssiger. Die Hauptfunktion eines Paketmanagers ist die Installation eines Pakets – eines Codes, der einem bestimmten Zweck dient – von einer globalen Registrierung in die lokale Umgebung eines Ingenieurs. Jedes Paket kann von anderen Paketen abhĂ€ngen oder nicht. Ein typisches Projekt kann Dutzende, Hunderte und sogar Tausende von Paketen in seinem AbhĂ€ngigkeitsbaum enthalten.

Diese AbhĂ€ngigkeiten werden versioniert und basierend auf semantischer Versionierung (Semver) installiert. Semver definiert ein Versionsschema, das die Arten von Änderungen in jeder neuen Version widerspiegelt, unabhĂ€ngig davon, ob eine Änderung eine API unterbricht, eine neue Funktion hinzufĂŒgt oder einen Fehler behebt. Semver ist jedoch darauf angewiesen, dass Paketentwickler keine Fehler begehen. Brechende Änderungen oder neue Fehler können zu installierten AbhĂ€ngigkeiten fĂŒhren, wenn die AbhĂ€ngigkeiten nicht gesperrt sind.

Architektur

Im Node-Ökosystem werden AbhĂ€ngigkeiten in einem Node-Module-Verzeichnis in einem Projekt platziert. Diese Dateistruktur kann jedoch vom tatsĂ€chlichen AbhĂ€ngigkeitsbaum abweichen, da doppelte AbhĂ€ngigkeiten zusammengefĂŒhrt werden. Der npm-Client installiert AbhĂ€ngigkeiten im Verzeichnis Node-Module nicht deterministisch. Dies bedeutet, dass die Struktur eines Node-Module-Verzeichnisses aufgrund der installierten Reihenfolge der AbhĂ€ngigkeiten von Person zu Person unterschiedlich sein kann. Diese Unterschiede können dazu fĂŒhren, dass auf einem Computer funktionierende Fehler auftreten, die viel Zeit in Anspruch nehmen.

Yarn behebt diese Probleme im Zusammenhang mit Versionierung und Nicht-Determinismus, indem Sperrdateien und ein Installationsalgorithmus verwendet werden, der deterministisch und zuverlĂ€ssig ist. Diese Lockfiles sperren die installierten AbhĂ€ngigkeiten auf eine bestimmte Version und stellen sicher, dass bei jeder Installation auf allen Computern dieselbe Dateistruktur in Node-Module entsteht. Die geschriebene Sperrdatei verwendet ein kurzes Format mit geordneten SchlĂŒsseln, um sicherzustellen, dass die Änderungen minimal sind und die ÜberprĂŒfung einfach ist.

Der Installationsvorgang ist in drei Schritte unterteilt:

Yarn fÀngt an, AbhÀngigkeiten aufzulösen, indem er Anforderungen an die Registrierung stellt und jede AbhÀngigkeit rekursiv nachschlÀgt.
Als NĂ€chstes sucht Yarn in einem globalen Cache-Verzeichnis, ob das benötigte Paket bereits heruntergeladen wurde. Wenn dies nicht der Fall ist, ruft er das Tarball fĂŒr das Paket ab und platziert es im globalen Cache, sodass es offline arbeiten kann und AbhĂ€ngigkeiten nicht mehr als einmal heruntergeladen werden mĂŒssen. AbhĂ€ngigkeiten können auch in der Quellcode-Verwaltung als Tarballs fĂŒr vollstĂ€ndige Offline-Installationen platziert werden.
Schließlich verknĂŒpft Yarn alles miteinander, indem alle benötigten Dateien aus dem globalen Cache in das lokale Verzeichnis Node-Module kopiert werden.

Durch die saubere Trennung dieser Schritte und die Verwendung deterministischer Ergebnisse kann Yarn Operationen parallelisieren, wodurch die Ressourcennutzung maximiert und der Installationsprozess beschleunigt wird. Bei einigen Facebook-Projekten reduzierte Yarn den Installationsvorgang um eine GrĂ¶ĂŸenordnung von einigen Minuten auf wenige Sekunden. Er verwendet auch einen Mutex, um sicherzustellen, dass mehrere ausgefĂŒhrte CLI-Instanzen nicht miteinander kollidieren und sich gegenseitig verschmutzen.

WĂ€hrend des gesamten Prozesses gibt Yarn strikte Garantien fĂŒr die Paketinstallation. Der Nutzer hat die Kontrolle darĂŒber, welche LifeCycle-Scrips fĂŒr welche Pakete ausgefĂŒhrt werden. PaketprĂŒfsummen werden ebenfalls in der Sperrdatei gespeichert, um sicherzustellen, dass man jedes Mal dasselbe Paket erhĂ€lt.

Features

ZusÀtzlich zu einer schnelleren und zuverlÀssigeren Installation gibt es zusÀtzliche Funktionen, um den Workflow des AbhÀngigkeits-Managements weiter zu vereinfachen:

  • KompatibilitĂ€t mit den npm- und Bower-Workflows und UnterstĂŒtzung beim Mischen von Registern
  • Möglichkeit, Lizenzen von installierten Modulen einzuschrĂ€nken und die Ausgabe von Lizenzinformationen zu ermöglichen
  • Bereitstellung einer stabilen öffentlichen JS-API, bei der die Protokollierung fĂŒr die Verwendung ĂŒber Build-Tools abstrahiert wird.

Tipp

Wenn Sie noch Fragen bezĂŒglich eines Online Marketing Themas haben, dann können Sie gerne unseren Glossar besuchen und sich ĂŒber das Thema informieren, wo Sie noch speziell Fragen haben.


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte