Wann sollte Garn über NPM verwendet werden? Was sind die Unterschiede?

98

Was sind die Unterschiede zwischen Garn und NPM? Zu der Zeit , diese Frage zu schreiben , kann ich nur einige Artikel über das Internet zeigt das finden , was wie das Garn Vorbehalte , eines NPM Befehl ist dies .

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

Asha
quelle
11
Dies ist keine schlechte Frage und verdient keine Ablehnung. Das heißt, es muss ein wenig ausgearbeitet werden, um es zu einer wirklich guten Frage zu machen.
jedd.ahyoung
Ein schnelles Google zeigt dies . Ich glaube, dies ist wahrscheinlich zu weit gefasst / nicht konstruktiv für StackOverflow und könnte ohnehin etwas mehr Forschung vertragen.
Aurora0001
1
@ Aurora0001 Als ich gesucht habe, habe ich das Cheatsheet gesehen, aber das ist nicht die Antwort auf meine Frage! Ich möchte Unterschiede zwischen den beiden und nicht Unterschiede zwischen den Befehlen kennen. Bitte lesen Sie zuerst meine Frage
Asha
4
@Asha Sie sollten Ihre Frage bearbeiten, um genauere Informationen zu erhalten, und zeigen, was Sie bereits recherchiert haben. Welche Unterschiede suchen Sie? Versuchen Sie herauszufinden, wie die Bibliotheken implementiert sind? Versuchen Sie herauszufinden, wie sie sich bei der Lösung des Problems unterscheiden? Wenn Sie Ihre Frage präziser stellen, kann sie je nach Ihren Fragen gut sein. (Je nachdem, was Sie fragen, sind die Informationen möglicherweise bereits bei Google verfügbar.)
jedd.ahyoung
3
lustige Leute sagen dir, du sollst es googeln; Ich habe festgestellt, dass Ihre Frage an Google geht ... Leute im Stackoverflow schließen Dinge gerne übermäßig aus, als ob sie dadurch wichtiger würden, denke ich.
Jairhumberto

Antworten:

67

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

Seit Version 5, npm

  • generiert eine 'Sperrdatei', die aufgerufen wird und package-lock.jsonIhren gesamten Abhängigkeitsbaum auf die gleiche Weise wie der Sperrmechanismus des Garns (oder eines anderen) fixiert.
  • Ein Werkzeug wurde erstellt
  • --save ist jetzt impliziert für npm i
  • Bessere Netzwerk- und Cache-Nutzung

npm 5.7.0 führte außerdem den npm ciBefehl ein, Abhängigkeiten in einer kontinuierlichen Integrationsumgebung schneller zu installieren, indem nur die in gefundenen Pakete installiert wurden package-lock.json(Meldung eines Fehlers, wenn die package-lock.jsonund package.jsonnicht synchronisiert sind).

Persönlich benutze ich immer noch npm.


Original

Ich hasse es, direkt aus Dokumenten zu zitieren, aber sie erklären hervorragend , warum, kurz genug, dass ich nicht sehe, wie ich die Ideen weiter zusammenfassen kann.

Weitgehend:

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

  2. Es paralellisiert Operationen, die npmdies nicht tun , und

  3. Das Netzwerk wird effizienter genutzt.

  4. Möglicherweise werden auch andere Systemressourcen (z. B. RAM) effizienter genutzt .

Was sind die Produktionserfahrungen der Leute damit? Wer weiß, es ist ein Kind für die breite Öffentlichkeit.

TL; DR von Yehuda Katz :

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

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

Schließlich macht Garn Sicherheit zu einem zentralen Wert.

Schöner Blogbeitrag

" NPM vs Yarn Cheat Sheet " von Gant Laborde

Etwas längere Version aus dem Projekt :

Schnell: Yarn speichert jedes heruntergeladene Paket zwischen, sodass es nie wieder benötigt wird. Außerdem werden Vorgänge parallelisiert, um die Ressourcennutzung zu maximieren, sodass die Installationszeiten schneller als je zuvor sind.

Zuverlässig: Mit einem detaillierten, aber präzisen Sperrdateiformat und einem 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 aus der README.md :

  • Offline-Modus: Wenn Sie zuvor ein Paket installiert haben, können Sie es ohne Internetverbindung erneut installieren.
  • Deterministisch: Unabhängig von der Installationsreihenfolge werden auf jedem Computer dieselben Abhängigkeiten auf dieselbe Weise installiert.
  • Netzwerkleistung: Yarn stellt Anforderungen effizient in die Warteschlange und vermeidet Anforderungswasserfälle, um die Netzwerkauslastung zu maximieren.
  • Mehrere Registrierungen: Installieren Sie ein Paket von npm oder Bower und halten Sie Ihren Paketworkflow gleich.
  • Netzwerkstabilität: Eine einzelne fehlgeschlagene Anforderung führt nicht zum Fehlschlagen einer Installation. Anfragen werden bei Fehlschlag wiederholt.
  • Flacher Modus: Beheben Sie nicht übereinstimmende Versionen von Abhängigkeiten in einer einzelnen Version, um das Erstellen von Duplikaten zu vermeiden.
  • Weitere Emojis. 🐈
msanford
quelle
Können Sie mir sagen, ob Garn eine Abhängigkeitsauflösung wie npm v3 hat ? Ich verstehe, dass es eine --flatOption gibt, die eine echte flache Struktur erzwingt , bei der nur eine Version jeder Abhängigkeit installiert werden darf, aber wie ist das Standardverhalten hierzu? Vielen Dank.
Dimitris Karagiannis
2
Mehr Emoji: Katze:
Huei Tan
7
Hervorragende Antwort. Ich frage mich, ob sie versucht haben, zu npm beizutragen, bevor sie die Syntax von gegabelt, umbenannt und geändert haben install -g.
Gardner Bickford
sehr guter Beitrag scotch.io/tutorials/…
Akshay Vijay Jain
2

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 Garnsperrdatei in einigen Fällen beschädigt sein kann und mit Garnwerkzeugen repariert werden muss

Garn :

  1. Ein neuer Paketmanager für JavaScript. Yarn speichert jedes heruntergeladene Paket zwischen, sodass es nie wieder benötigt wird. Außerdem werden Vorgänge parallelisiert, um die Ressourcennutzung zu maximieren, sodass die Installationszeiten schneller als je zuvor sind.
  2. Garn unterstützt die Anmeldung mit einem Passwort nicht (während NPM dies tut)
Yogesh Waghmare
quelle
1
Welche Art von Logins?
Rich Stone
2

Was ist PNPM?

pnpmverwendet 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 mit derselben Version von lodash verwenden, befinden sich 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, in denen es installiert werden soll.

Dadurch sparen Sie Gigabyte Speicherplatz auf Ihrer Festplatte und Sie haben viel schnellere Installationen! Wenn Sie weitere Informationen zu der von pnpm erstellten eindeutigen node_modules-Struktur wünschen und wissen möchten, warum sie mit dem Node.js-Ökosystem gut 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 YarnundNPM

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

Klicken Sie hier, um den Benchmark abzuschließen

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

WasiF
quelle
1

Wenn Sie ein Paket mit Yarn installieren (mit Garn Paketnamen hinzufügen), wird das Paket auf Ihrer Festplatte abgelegt . Bei der nächsten Installation wird dieses Paket verwendet, anstatt eine HTTP-Anforderung zu senden, um den Tarball aus der Registrierung abzurufen.

Garn wird mit einem praktischen Lizenzprüfer geliefert , der sehr leistungsfähig werden kann, wenn Sie die Lizenzen aller Module überprüfen müssen, von denen Sie abhängig sind.

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

Für weitere Informationen lesen Sie bitte den folgenden Blog

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

Ganesh Kalje
quelle
1

Der Versuch, 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 package.jsonDatei generiert . Es enthält alle Abhängigkeiten des Projekts.

Dann

npm install

würde ein Verzeichnis erstellen node_modulesund die Abhängigkeiten (die Sie der package.jsonDatei hinzugefügt haben ) darin herunterladen .

Es wird auch eine package-lock.jsonDatei erstellt. Diese Datei wird verwendet, um den Baum der Abhängigkeiten zu beschreiben, der generiert wurde. Es ermöglicht Entwicklern, genau dieselben Abhängigkeiten zu installieren. Sie können sich beispielsweise vorstellen, dass ein Entwickler eine Abhängigkeit auf Version 2 und dann auf Version 3 aktualisiert, während eine andere direkt auf Version 3 aktualisiert.

npm installiert Abhängigkeiten nicht deterministisch, was bedeutet, dass die beiden Entwickler ein unterschiedliches node_modulesVerzeichnis haben können, was zu unterschiedlichen Verhaltensweisen führt . ** npm hat beispielsweise im Februar 2018 unter einem schlechten Ruf gelitten: 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, hat Facebook einen neuen Paketmanager eingeführt (2016): Garn Sie einen schnelleren, sichereren und zuverlässigeren Paketmanager für JavaScript.

Sie können einem Projekt Garn hinzufügen , indem Sie Folgendes eingeben:

yarn init

Dadurch wird eine package.jsonDatei erstellt. Installieren Sie dann die Abhängigkeiten mit:

yarn install

Ein Ordner node_moduleswird generiert. Garn generiert auch eine Datei namens yarn.lock. Diese Datei dient demselben Zweck wie die package-lock.json, wird jedoch stattdessen unter Verwendung eines deterministischen und zuverlässigen Algorithmus erstellt, was zu konsistenten Builds führt.

Wenn Sie ein Projekt mit npm gestartet haben , können Sie problemlos auf Yarn migrieren . Garn verbraucht das gleiche package.json. Weitere Informationen finden Sie unter Migrieren von npm .

Allerdings npm wurde mit jedem neuen Versionen verbessert und einige Projekte noch verwendet npm über Garn .

Mathieu Gemard
quelle
1

Die Antwort von @msanford deckt fast alles ab, mir fehlt jedoch der Sicherheitsteil (OWASPs bekannte Sicherheitslücken).

Garn

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

npm

Sie können verwenden npm audit fix, so dass einige von ihnen selbst reparieren können.

Beide, dh npm audit& yarn audithaben ihre eigenen Continuous Integration Tools. Dies sind jeweils https://github.com/IBM/audit-ci (verwendet, funktioniert hervorragend!) Und https://yarnpkg.com/package/audit-ci (nicht verwendet).

Daniel Danielecki
quelle