Wann ist Garn statt NPM zu verwenden? Was sind die Unterschiede?

Lesezeit: 9 Minuten

Benutzer-Avatar
Ascha

Was sind die Unterschiede zw Garn und NEM? Zum Zeitpunkt des Schreibens dieser Frage kann ich nur einige Artikel im Internet finden, die zeigen, wie das Yarn-Äquivalent eines NPM-Befehls aussieht Dies.

Haben sie die gleichen Funktionen (ich weiß, dass Yarn lokales Caching durchführt und es so aussieht, als müssten Sie ein Paket nur einmal herunterladen), aber gibt es abgesehen davon irgendwelche Vorteile für den Wechsel von NPM zu Yarn?

  • Dies ist keine schlechte Frage und verdient keine Ablehnung. Das heißt, es muss ein wenig konkretisiert werden, um es zu einer wirklich guten Frage zu machen.

    – jedd.ahyoung

    13. Oktober 2016 um 17:58 Uhr

  • Ein schnelles Google taucht auf Dies. Ich glaube, dass dies wahrscheinlich zu breit / nicht konstruktiv für StackOverflow ist und ohnehin etwas mehr Forschung vertragen könnte.

    – Aurora0001

    13. Oktober 2016 um 17:59 Uhr


  • @ Aurora0001 Als ich gesucht habe, habe ich den Cheatsheet gesehen, aber das ist nicht die Antwort auf meine Frage! Ich möchte die Unterschiede zwischen den beiden kennen und nicht die Unterschiede zwischen den Befehlen. Bitte lesen Sie zuerst meine Frage

    – Ascha

    13. Oktober 2016 um 18:02 Uhr

  • @Asha Sie sollten Ihre Frage bearbeiten, um genauere Angaben zu erhalten, und zeigen, was Sie bereits recherchiert haben. Welche Art von Unterschieden suchen Sie? Versuchen Sie herauszufinden, wie die Bibliotheken implementiert sind? Versuchen Sie herauszufinden, wie sie sich bei der Herangehensweise an das Problem unterscheiden? Wenn Sie Ihre Frage präzisieren, kann es gut sein, je nachdem, was Sie fragen. (Je nachdem, was Sie fragen, sind die Informationen möglicherweise bereits auf Google verfügbar.)

    – jedd.ahyoung

    13. Oktober 2016 um 18:04 Uhr

  • @Asha, wenn Sie gezeigt hätten, dass Sie das gelesen hatten, es aber nicht relevant war, wäre es hilfreich gewesen, den Forschungsaufwand zu zeigen. Wie gesagt, Vergleichsfragen eignen sich normalerweise nicht gut für Fragen und Antworten, und es wäre vielleicht besser gewesen, wenn Sie die Frage anders formuliert hätten.

    – Aurora0001

    13. Oktober 2016 um 19:21 Uhr

Benutzer-Avatar
msanford

UPDATE: März 2018 (etwas spät…)

Seit Version 5, npm

  • erzeugt eine ‘Sperrdatei’ namens package-lock.json das Ihren gesamten Abhängigkeitsbaum auf die gleiche Weise behebt, wie es der Garn- (oder jeder andere) Sperrmechanismus tut,
  • Ein Werkzeug wurde erstellt
  • --save ist jetzt impliziert für npm i
  • Bessere Netzwerk- und Cache-Nutzung

npm 5.7.0 weiter eingeführt das npm ci Befehl zum schnelleren Installieren von Abhängigkeiten in einer Continuous-Integration-Umgebung, indem nur Pakete installiert werden, die in der package-lock.json (Meldung eines Fehlers, wenn die package-lock.json und package.json sind nicht synchronisiert).

Persönlichbenutze ich immer noch npm.


Original

Ich hasse es, direkt aus Dokumenten zu zitieren, aber sie tun a Großartig Aufgabe, zu erklären, warum, prägnant genug, dass ich nicht sehe, wie ich die Ideen weiter zusammenfassen soll.

Weitgehend:

  1. Sie wissen immer, dass Sie auf jeder Entwicklungsmaschine das Gleiche erhalten

  2. Es parallelisiert Operationen, die npm nicht, und

  3. Dadurch wird das Netzwerk effizienter genutzt.

  4. Es kann auch andere Systemressourcen (z. B. RAM) effizienter nutzen.

Welche Produktionserfahrungen haben die Leute damit? Wer weiß, es ist ein Säugling für die breite Öffentlichkeit.

TL;DR von Yehuda Katz:

Von Anfang an garantiert die Yarn-Sperrdatei, dass das wiederholte Ausführen von Garn auf demselben Repository zu denselben Paketen führt.

Zweitens versucht Yarn, mit einem kalten Cache, aber insbesondere mit einem warmen Cache, eine gute Leistung zu erzielen.

Schließlich macht Yarn Sicherheit zu einem Kernwert.

Schöner Blogbeitrag

NPM vs. Garn-Spickzettel“ von Gant Laborde

Etwas längere Version aus dem Projekt:

Schnell: Yarn speichert jedes heruntergeladene Paket im Cache, sodass dies nie wieder erforderlich ist. Außerdem werden Vorgänge parallelisiert, um die Ressourcennutzung zu maximieren, sodass die Installationszeiten schneller als je zuvor sind.

Zuverlässig: Durch die Verwendung eines detaillierten, aber prägnanten Lockfile-Formats und eines deterministischen Algorithmus für Installationen kann Yarn garantieren, dass eine Installation, die auf einem System funktioniert hat, auf jedem anderen System genauso funktioniert.

Sicher: Yarn verwendet Prüfsummen, um die Integrität jedes installierten Pakets zu überprüfen, bevor sein Code ausgeführt wird.

Und von die README.md:

  • Offline-Modus: Wenn Sie zuvor ein Paket installiert haben, können Sie es ohne Internetverbindung erneut installieren.
  • Deterministisch: Die gleichen Abhängigkeiten werden auf allen Computern unabhängig von der Installationsreihenfolge auf die gleiche Weise installiert.
  • Netzwerkleistung: Yarn stellt Anfragen effizient in die Warteschlange und vermeidet Wasserfallfälle, um die Netzwerkauslastung zu maximieren.
  • Mehrere Registrierungen: Installieren Sie ein beliebiges Paket von npm oder Bower und behalten Sie den gleichen Paket-Workflow bei.
  • Netzwerkresilienz: Eine einzelne fehlgeschlagene Anfrage führt nicht dazu, dass eine Installation fehlschlägt. Anfragen werden bei Fehlschlagen wiederholt.
  • Flat-Modus: Lösen Sie nicht übereinstimmende Versionen von Abhängigkeiten in einer einzigen Version auf, um die Erstellung von Duplikaten zu vermeiden.
  • Mehr Emojis. 🐈

  • Können Sie mir sagen, ob Garn die Abhängigkeitsauflösung durchführt wie es npm v3 tut? Ich verstehe, dass es eine gibt --flat Option, die a erzwingt real flache Struktur, in der nur eine Version jeder Abhängigkeit installiert werden darf, aber was ist das Standardverhalten dafür? Vielen Dank.

    – Dimitris Karagiannis

    3. November 2016 um 15:07 Uhr

  • Ausgezeichnete Antwort. Ich frage mich, ob sie versucht haben, zu npm beizutragen, bevor sie forking und umbenannt und die Syntax von geändert haben install -g.

    – Gardner Bickford

    18. Juni 2017 um 2:54 Uhr

  • sehr guter Beitrag scotch.io/tutorials/…

    – Akshay Vijay Jain

    6. Januar 2018 um 6:45 Uhr

Benutzer-Avatar
WasiF

Was ist PNPM?

pnpm verwendet Hardlinks und Symlinks, um eine Version eines Moduls nur einmal auf einer Festplatte zu speichern. Wenn Sie beispielsweise npm oder Yarn verwenden und 100 Projekte haben, die dieselbe Version von lodash verwenden, haben Sie 100 Kopien von lodash auf der Festplatte. Mit pnpm wird Lodash an einem einzigen Ort auf der Festplatte gespeichert und über einen festen Link in die node_modules eingefügt, wo es installiert werden soll.

Als Ergebnis sparen Sie Gigabyte Speicherplatz auf Ihrer Festplatte und Sie haben viel schnellere Installationen! Wenn Sie mehr Details über die einzigartige node_modules-Struktur wünschen, die pnpm erstellt, und warum sie gut mit dem Node.js-Ökosystem funktioniert, lesen Sie diesen kleinen Artikel: Warum sollten wir pnpm verwenden?

Wie installiere ich PNPM?

npm install -g pnpm

Wie installiere ich das npm-Paket mit PNPM?

pnpm install -g typescript // or your desired package

Vorteile von PNPM Über Yarn und NPM

Hier ist ein Fortschrittsbalken, der die Installationszeit anzeigt NPM, YARN und PNPM (kürzerer Balken ist besser)
Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf Vollständiger Check-Benchmark

Weitere Informationen finden Sie unter https://www.npmjs.com/package/pnpm

Benutzer-Avatar
Mathieu Gemard

Versucht Anfängern einen besseren Überblick zu geben.

npm war historisch (2010) der beliebteste Paketmanager für JavaScript. Wenn Sie es zum Verwalten der Abhängigkeiten Ihres Projekts verwenden möchten, können Sie den folgenden Befehl eingeben:

npm init

Dadurch wird eine generiert package.json Datei. Es enthält alle Abhängigkeiten des Projekts.

Dann

npm install

würde ein Verzeichnis erstellen node_modules und laden Sie die Abhängigkeiten herunter (die Sie der package.json Datei) darin.

Es wird auch eine erstellt package-lock.json Datei. Diese Datei wird verwendet, um den Baum der generierten Abhängigkeiten zu beschreiben. Es ermöglicht Entwicklern, genau die gleichen Abhängigkeiten zu installieren. Sie können sich beispielsweise vorstellen, dass ein Entwickler eine Abhängigkeit auf v2 und dann auf v3 aktualisiert, während ein anderer direkt auf v3 aktualisiert.

npm installiert Abhängigkeiten auf nicht deterministische Weise, was bedeutet, dass die beiden Entwickler unterschiedliche haben könnten node_modules Verzeichnis resultierend in unterschiedliche Verhaltensweisen. **npm hat unter einem schlechten Ruf gelitten, wie zum Beispiel im Februar 2018: In Version 5.7.0 wurde ein Problem entdeckt, bei dem das Ausführen von sudo npm auf Linux-Systemen den Besitz von Systemdateien ändern und das Betriebssystem dauerhaft beschädigen würde.

Um diese und andere Probleme zu lösen, Facebook hat einen neuen Paketmanager eingeführt (2016): Garn a schneller, sicherer und zuverlässiger Paketmanager für JavaScript.

Du kannst hinzufügen Garn zu einem Projekt, indem Sie Folgendes eingeben:

yarn init

Dadurch entsteht ein package.json Datei. Installieren Sie dann die Abhängigkeiten mit:

yarn install

Ein Ordner node_modules wird generiert. Garn generiert auch eine Datei namens yarn.lock. Diese Datei dient demselben Zweck wie die package-lock.json sondern wird stattdessen mit einem deterministischen und zuverlässigen Algorithmus konstruiert, was zu konsistenten Builds führt.

Wenn Sie ein Projekt mit gestartet haben npmkönnen Sie tatsächlich migrieren Garn leicht. Garn wird das gleiche verbrauchen package.json. Sehen Migration von npm für mehr Details.

Jedoch, npm wurde mit jeder neuen Version verbessert und einige Projekte werden immer noch verwendet npm Über Garn.

Die Antwort von @msanford deckt fast alles ab, mir fehlt jedoch der Sicherheitsteil (OWASPs Known Vulnerabilities).

Garn

Sie können sie mit überprüfen yarn audit, Sie können sie jedoch nicht beheben. Dies ist immer noch ein offenes Problem auf einem GitHub (https://github.com/yarnpkg/yarn/issues/7075).

npm

Sie können verwenden npm audit fixsodass Sie einige von ihnen selbst beheben können.

Beide, dh npm audit & yarn audit haben ihre eigenen Continuous-Integration-Tools. Dies sind bzw https://github.com/IBM/audit-ci (gebraucht, funktioniert super!) und https://yarnpkg.com/package/audit-ci (nicht verwendet).

npm:

  1. Der Paketmanager für JavaScript. npm ist die Befehlszeilenschnittstelle zum npm-Ökosystem. Es ist kampferprobt, überraschend flexibel und wird täglich von Hunderttausenden von JavaScript-Entwicklern verwendet.
  2. NPM generiert eine korrekte Sperrdatei, während eine Yarn-Sperrdatei in einigen Fällen beschädigt sein kann und mit Garn-Tools repariert werden muss

Garn:

  1. Ein neuer Paketmanager für JavaScript. Yarn speichert jedes heruntergeladene Paket im Cache, sodass dies nie wieder erforderlich ist. Außerdem werden Vorgänge parallelisiert, um die Ressourcennutzung zu maximieren, sodass die Installationszeiten schneller als je zuvor sind.
  2. Yarn unterstützt keine Anmeldung mit einem Passwort (während NPM dies tut)

  • was für logins?

    – Rich Steinmetz

    11. Februar 2020 um 20:35 Uhr

Benutzer-Avatar
ganesh kalje

Wenn Sie ein Paket mit Yarn installieren (mit Yarn add packagename), wird es legt das Paket auf Ihrer Festplatte ab. Während der nächsten Installation wird dieses Paket verwendet, anstatt eine HTTP-Anforderung zu senden, um den Tarball aus der Registrierung abzurufen.

Garn kommt mit a praktischer Lizenzprüferwas sehr mächtig werden kann, wenn Sie die Lizenzen aller Module überprüfen müssen, auf die Sie angewiesen sind.

Wenn Sie mit proprietärer Software arbeiten, spielt es keine Rolle, welche Sie verwenden. Mit npm können Sie npm-shrinkwrap.js verwenden, während Sie mit Yarn Garn.lock verwenden können.

Für weitere Informationen lesen Sie bitte den folgenden Blog

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

  • was für logins?

    – Rich Steinmetz

    11. Februar 2020 um 20:35 Uhr

Benutzer-Avatar
Nayeem Riddhi

Garn

Vorteile::

  • Unterstützt Funktionen wie parallele Installation und Zero-Install führt zu besserer Leistung

  • Sicherer

  • Große aktive Benutzergemeinschaft

Nachteile::

  • Funktioniert nicht mit älteren Versionen von Node.js (unter Version 5)

  • Probleme bei der Installation nativer Module

NPM

Vorteile::

  • Benutzerfreundlichkeit, insbesondere für Entwickler, die mit älteren Versionen arbeiten.

  • Optimierte lokale Paketinstallation, um Festplattenspeicher zu sparen.

Nachteile::

  • Sicherheitslücken sind immer noch da

Fazit:

Ist Garn besser als NPM?

In Bezug auf Geschwindigkeit und Leistung ist Yarn besser als NPM, da es die parallele Installation durchführt. Garn ist immer noch sicherer als NPM. Yarn verwendet jedoch mehr Speicherplatz als NPM.

1282900cookie-checkWann ist Garn statt NPM zu verwenden? Was sind die Unterschiede?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy