Garn 2 - mit Prolog und Plug-Ins

Yarn - der Paketmanager für den Knoten - hat die zweite Version veröffentlicht . Und anscheinend haben sich die Jungs ernsthaft vorgenommen, den Status Quo im Node-Ökosystem oder sogar die Paketmanager im Allgemeinen zu ändern. Löschen Sie alle Bilder über Gigabyte Nurse node_modules, entfernen Sie yarn installaus den Skripten CI, wir starten eine weitere große JavaScript-Verwirrung. Zusamenfassend:

  • Der Plug'n'Play-Modus wurde zum Standard und Node_Modules wurden über das Plugin sekundär.
  • Wir haben ein Plugin und einen Workflow für Monorep erstellt - möglicherweise wird Herna nicht benötigt.
  • Sie haben ihre Mini-Shell eingebaut, sodass die Skripte des Pakets ohne diese Ihrer Cross-Envs in Windows ausgeführt werden können.
  • Es wurde ein Prolog hinzugefügt, um die Regeln zwischen Arbeitsbereichen zu überprüfen.
  • npx spülte wieder ihre ab.
Wenn Sie nicht alle Ihre Projekte aktualisieren möchten, führen Sie einfach yarn policies set-version ^1(siehe Legacy.yarnpkg.com/de/docs/cli/policies ) in den Repositorys aus, die auf Garn 1 verbleiben sollen, und schreiben Sie das Ergebnis fest. Dann verwendet Yarn die lokalen Yarn 1-Binärdateien anstelle der globalen, sodass jeder im Team dieselbe Version verwendet!


Im Allgemeinen lassen sich zwei Entwicklungsrichtungen verfolgen: a) maximale Reproduzierbarkeit der Umgebung und b) Bewegung in Richtung einer Plattform für das Paketmanagement.

In Bezug auf den ersten Punkt fuhr das Garn immer - tatsächlich war dies der Grund, warum es einmal auftauchte und sofort npm drückte (ich erinnere mich, dass das Ausführen der npm-Installation zu unterschiedlichen Ergebnissen führen kann, da die Sperrdatei in der Knotenwelt das Verdienst des Garns ist). . Obwohl ich persönlich wegen der wütenden Zeile in den npm-Protokollen darauf umgestiegen bin .

Aber jetzt beschlossen sie sozusagen, an ihre Grenzen zu gehen. Wenn Sie ein Paket hinzufügen, wird es (und alle seine Abhängigkeiten) in Form eines Zip-Archivs dem Cache im Ordner .yarn im Paketordner (wie .git) hinzugefügt. Anstelle von node_modules wird eine .pnp.js-Datei erstellt, die Modulimporte verarbeitet. Es gibt zwei wichtige Konsequenzen:

  1. Sie können diesen Cache direkt zu git hinzufügen - und nach dem Auschecken haben Sie sofort die aktuelle Version der Anwendung mit allen Abhängigkeiten.
  2. Garnverbindung funktioniert viel besser - jetzt werden auch Peer-Abhängigkeiten korrekt verarbeitet

Was die Plattform angeht, haben die Jungs auf die Plugin-Architektur umgestellt (dh Garn hauptsächlich als API und später als CLI) und sogar erklärt, dass sie den Knoten selbst loswerden möchten, was Garn zu einer generischen Lösung für den Aufbau eigener Paketmanager macht .

Es klingt interessant, ehrgeizig und leicht arrogant. Mal sehen, ob sie bereits in der PnP-Phase fertig werden oder stehen bleiben.

Auf jeden Fall werde ich versuchen, unser Projekt auf Garn 2 zu übertragen, wenn es klappt - es wird schön sein. Wie geht es dir?

UPD: Über den Prolog im Titel ist kein Scherz, es wird möglich sein, die Regeln für die Überprüfung von Arbeitsbereichen darauf zu schreiben, next.yarnpkg.com/features/constraints

Next - ein Auszug aus der offiziellen Ankündigung .

Das wichtigste


Die Ausgabe an die Konsole wurde zur besseren Lesbarkeit überarbeitet.
CLI-Befehle ( yarn add, ...) berücksichtigen jetzt Arbeitsbereiche.
Sie können sie yarn installin Ihrem Repository
entfernen . Weniger gefährliche npx-Alternative: yarn dlxAusführen
von yarn workspaces foreach
Einmalstücken . Führen Sie einen Befehl für alle Arbeitsbereiche von Mankipatching-Paketen über das Patch-Protokoll aus:
Links zu lokalen Paketen über das Portalprotokoll :
Ein neuer Workflow zum Freigeben von Arbeitsbereichen, normalerweise
deklarative Überprüfungen und Korrekturen von Arbeitsbereichen (PROLOG ENTHALTEN)

Und auch ...


Pakete werden nur erstellt, wenn
ohne Paket-Builds absolut nichts möglich ist.
Skripte, die in der Universal-Shell ausgeführt werden.
Peer-Abhängigkeiten funktionieren auch über
Garnverknüpfungen . Lockfile ist zu regulärer YAML geworden. Der
gesamte Code ist jetzt in TypeScript.
Plug-In-Unterstützung

Änderungen brechen


Einstellungen einheitlich geworden sind.
Pakete mit ihren Grenzen einhalten müssen.
Bundle - Abhängigkeiten werden nicht mehr unterstützt.
Pakete in schreibgeschützten Archiven gespeichert sind.

Detaillierte Changelog ist hier , sind Update - Anleitung hier .

Wird es schwierig sein, zu Garn 2 zu wechseln?


Dank unserer Betatester und der allgemeinen Unterstützung des Ökosystems haben wir die mit einem solch massiven Upgrade verbundenen Schmerzen erheblich gelindert. In der Umzugsanleitung wird detaillierter beschrieben, aber im Allgemeinen sollte alles normal sein, während Sie die neuesten Versionen von Tools (ESLint, Babel, TypeScript, Gatsby usw.) verwenden.

Es gibt jedoch eine wichtige Neigung: Flow und React-Native können derzeit nicht mit Plug'n'Play (PnP) verwendet werden . Wir suchen nach Möglichkeiten, mit ihren Teams zusammenzuarbeiten, damit es funktioniert. Im Moment können Sie auf Garn 1 bleiben oder das Plugin node_modules verwenden , das Abwärtskompatibilität bietet, um den Übergang zu erleichtern (es ist noch in Betrieb, es können Fehler auftreten). Mehr hier .

Was wird mit der alten Version passieren?


Yarn 1.22 wird nächste Woche veröffentlicht. Danach wechselt der 1.x-Zweig offiziell in den Live-Modus. Das heißt, es gibt keine anderen Releases als Schwachstellenkorrekturen. Neue Funktionen werden ausschließlich in Garn 2 hergestellt. In der Praxis bedeutet dies:

  • Das alte Repository (Garnpkg / Garn) wird für Garnpkg / Vermächtnis verlassen, um seinen Überlebensstatus widerzuspiegeln. Es wird einige Zeit geöffnet sein, aber höchstwahrscheinlich werden wir es in ein oder zwei Jahren archivieren.
  • Das neue Repository wird nicht in yarnpkg / yarn umbenannt, da dadurch viele alte Links beschädigt werden. Auf absehbare Zeit bleibt er bei yarnpkg / berry .
  • Die alte Site wird auf legacy.yarnpkg.com verschoben, die neue Site (jetzt next.yarnpkg.com) wird in die Hauptdomain yarnpkg.com verschoben
  • Das Garnpaket auf npm wird folgendermaßen aktualisiert:

    • Das Beeren-Tag wird immer in der neuesten Version 2.x angezeigt
    • legacy 1.x
    • latest legacy , berry. , Yarn 2.
  • - Node Yarn 2 Node 14, 2020 . yarnPath Yarn 2 .
  • Wir wechseln zu vollautomatischen GitHub-Aktionen und einige Batch-Repositorys (insbesondere Homebrew, Chocolatey usw.) sind noch nicht verschraubt. Infolgedessen erhalten sie später als die anderen ein Yarn 2-Update. Wir empfehlen die Verwendung der Garnsatzversion (oder der Garnrichtliniensatzversion für Garn 1).

Wir gehen davon aus, dass die meisten dieser Änderungen bis zum 1. Februar 2020 abgeschlossen sein werden.

Source: https://habr.com/ru/post/undefined/


All Articles