Wir verwenden Garn für alle unsere deterministischen Paketinstallationen, hindern den Benutzer jedoch nicht daran, npm zu verwenden. Ich vermute jedoch, dass beide Dateien Probleme verursachen werden. Sollte eine zu Ihrem .gitignore-Verzeichnis hinzugefügt werden?
117
Antworten:
Übernehmen Sie im Allgemeinen immer Abhängigkeits-Sperrdateien
Wie abgedeckt anderswo, Abhängigkeit Lock - Dateien, die von vielen Paket - Management - Systemen unterstützt werden (zB: Komponist und Bündler ), sollte die Code - Basis in End-of-Chain - Projekten verpflichtet werden - so dass jedes einzelne versuchen, dieses Projekt auszuführen tut also mit genau dem getesteten Satz von Abhängigkeiten.
Es ist weniger klar, ob Sperrdateien immer in Paketen festgeschrieben werden sollen, die in anderen Projekten enthalten sein sollen (wo lockerere Abhängigkeiten wünschenswert sind). Doch sowohl Garn und NPM (wie durch @Cyrille abgedeckt) intelligent ignorieren
yarn.lock
undpackage-lock.json
jeweils dort notwendig , wo es sicher zu machen, immer diese Lock - Dateien zu begehen.Sie sollten also immer mindestens einen von
yarn.lock
oderpackage-lock.json
abhängig davon verwenden, welchen Paketmanager Sie verwenden.Sollten Sie sowohl yarn.lock als auch package-lock.json festschreiben?
Derzeit haben wir zwei verschiedene Paket - Management - Systeme, die beide installieren den gleichen Satz von Abhängigkeiten aus
package.json
, aber die erzeugen und lesen aus zwei verschiedenen Lock - Dateien. NPM 5 erzeugtpackage-lock.json
, während Garn erzeugtyarn.lock
.Wenn Sie ein Commit durchführen, bauen
package-lock.json
Sie die Unterstützung für Personen ein, die Ihre Abhängigkeiten mit NPM 5 installieren. Wenn Sie ein Commit durchführenyarn.lock
, bauen Sie die Unterstützung für Personen ein, die Abhängigkeiten mit Yarn installieren.Ob Sie sich für ein Commit
yarn.lock
oderpackage-lock.json
beides entscheiden, hängt davon ab, ob diejenigen, die sich in Ihrem Projekt entwickeln, nur Yarn oder NPM 5 oder beides verwenden. Wenn Ihr Projekt Open Source ist, ist es wahrscheinlich das Community-freundlichste, beides zu verpflichten und einen automatisierten Prozess zu haben, um sicherzustellenyarn.lock
undpackage-lock.json
immer synchron zu bleiben.Update: Yarn hat jetzt einen
import
Befehl eingeführt, der eineyarn.lock
Datei aus einerpackage-lock.json
Datei generiert . Dies kann nützlich sein, um die beiden Dateien synchron zu halten. (Danke @weakish)Dieses Thema wurde im Rahmen des Garnprojekts ausführlich erörtert in:
Beide sind jetzt geschlossen.
quelle
yarn import
wurde im Jahr 2018 eingeführt. yarnpkg.com/blog/2018/06/04/yarn-import-package-lockSie sollten 1 Abhängigkeitsbaumsperrdatei festschreiben, aber nicht beide. Dies erfordert auch die Standardisierung auf Garn oder npm (nicht auf beiden), um ein Projekt mit zu erstellen und zu entwickeln.
Hier ist der Garnartikel darüber, warum yarn.lock festgeschrieben werden sollte, wenn Sie auf Garn standardisieren.
Wenn Sie sowohl die
yarn.lock
Datei als auch diepackage-lock.json
Dateien festschreiben , gibt es viele Möglichkeiten, wie die beiden Dateien unterschiedliche Abhängigkeitsbäume bereitstellen können (selbst wenn die Baumauflösungsalgorithmen von Garn und npm identisch sind), und es ist nicht trivial, sicherzustellen, dass sie genau die bereitstellen gleiche Antwort. Da dies nicht trivial ist, ist es unwahrscheinlich, dass in beiden Dateien derselbe Abhängigkeitsbaum beibehalten wird, und Sie möchten kein unterschiedliches Verhalten, je nachdem, ob der Build mit Garn oder npm durchgeführt wurde.Wenn das Garn von der Verwendung
yarn.lock
zu wechseltpackage-lock.json
( Problem hier ), wird die Auswahl der zu festschreibenden Sperrdatei einfach, und wir müssen uns nicht mehr um Garn und npm kümmern, was zu unterschiedlichen Builds führt. Basierend auf diesem Blog-Beitrag ist dies eine Änderung, die wir nicht bald erwarten sollten (der Blog-Beitrag beschreibt auch die Unterschiede zwischenyarn.lock
undpackage-lock.json
.quelle
Ich habe über die gleiche Frage nachgedacht. Hier sind meine Gedanken, hoffe es hilft:
In der Dokumentation zu npm package-lock.json heißt es:
Dies ist großartig, da es den Effekt "Funktioniert auf meinem Computer" verhindert.
Ohne diese Datei wird
npm install --save A
npm"A": "^1.2.3"
zu Ihrer hinzugefügtpackage.json
. Wenn jemand anderes innpm install
Ihrem Projekt ausgeführt wird, wurde möglicherweise die Version1.2.4
vonA
veröffentlicht. Da es sich um die neueste verfügbare Version handelt, die den in Ihrem angegebenen Semver-Bereich erfülltpackage.json
, wird diese Version installiert. Aber was ist, wenn in dieser Version ein neuer Fehler eingeführt wurde? Diese Person hat ein Problem, das Sie nicht reproduzieren können, da Sie die vorherige Version ohne Fehler haben.Durch das Korrigieren des Status Ihres
node_modules
Verzeichnissespackage-lock.json
verhindert file dieses Problem, da jeder die gleichen Versionen aller Pakete hat.Aber was ist, wenn Sie ein npm-Modul schreiben und veröffentlichen? In der Dokumentation heißt es:
Selbst wenn Sie es festschreiben, erhält der Benutzer bei der Installation Ihres Moduls nicht die
package-lock.json
Datei, sondern nur diepackage.json
Datei. Daher installiert npm die neueste Version, die die Semver-Bereiche aller Ihrer Abhängigkeiten erfüllt. Dies bedeutet, dass Sie Ihr Modul immer mit diesen Versionen Ihrer Abhängigkeiten testen möchten und nicht mit der, die Sie installiert haben, als Sie mit dem Schreiben Ihres Moduls begonnen haben. In diesem Fallpackage-lock.json
ist es also eindeutig nutzlos. Mehr noch, es kann nervig sein.quelle
Hier ist meine Faustregel: Wenn Sie an einer Anwendung arbeiten, schreiben Sie die Sperrdatei (en) fest. Wenn Sie eine Bibliothek verwalten, fügen Sie sie Ihrer ignorierten Liste hinzu. In beiden Fällen sollten Sie genaue Semverbereiche in verwenden
package.json
. Yehuda Katz ( zwischengespeichert ) hat eine großartige Erklärung geschrieben, wannGemfile.lock
(Commys Sperrdatei) festgeschrieben werden soll und wann nicht. Lesen Sie zumindest den Abschnitt tl; dr.quelle
.gitignore
und befindet sich normalerweise im Stammverzeichnis des Projekts.Du hast Recht! Beides zuzulassen
npm
und verwendetyarn
zu werden, wird Probleme verursachen. Schauen Sie sich diesen Artikel an .Möglicherweise möchten Sie nicht beide
npm
undyarn
als Ihren Paketmanager.quelle
Diese Dateien werden von Ihren Tools verwaltet. Unter der Annahme, dass die Verwendung von Garn das Update effektiv aktualisiert
package-lock.json
, funktioniert das Festschreiben beider Dateien vermutlich einwandfrei.Ich denke , das wichtigste für Ihre Benutzer ist
package-lock.json
(ich zum Beispiel nicht Garn verwenden) , um dies hat begangen werden.Für die
yarn.lock
kommt es darauf an, ob Sie alleine oder im Team arbeiten. Wenn solo, dann besteht wohl keine Notwendigkeit, es zu begehen. Wenn Sie in einem Team arbeiten möchten, sollten Sie es wahrscheinlich festlegen , zumindest bis das Garn es unterstützt 🙂Ich nehme an, das Garnteam wird irgendwann aufhören zu verwenden
yarn.lock
undpackage-json.lock
stattdessen verwenden, zu diesem Zeitpunkt wird es einfacher 😛quelle
Nein, die gleichzeitige Verwendung beider Sperrdateien führt meistens zu Inkonsistenzen in Ihrem Abhängigkeitsbaum, insbesondere bei der Zusammenarbeit in einem Team. Das Ignorieren des einen oder anderen Schlosses ist eine einfache Lösung. Stellen Sie einfach sicher, dass Ihr Team diese Änderung versteht und damit einverstanden ist.
quelle