Ich sehe, das sind zwei getrennte Fragen in einer. Lassen Sie mich beide beantworten.
Sollten Sie die Datei in Repo festschreiben?
Ja. Wie in der Antwort von ckuijjer erwähnt , wird im Migrationshandbuch empfohlen , diese Datei in das Repo aufzunehmen. Lesen Sie weiter, um zu verstehen, warum Sie dies tun müssen.
Was ist yarn.lock
?
In dieser Datei werden die genauen Abhängigkeitsversionen für Ihr Projekt zusammen mit Prüfsummen für jedes Paket gespeichert. Auf diese Weise können Sie Ihre Abhängigkeiten konsistent gestalten.
Um zu verstehen, warum diese Datei benötigt wird, müssen Sie zunächst verstehen, was das Problem hinter den ursprünglichen NPMs war package.json
. Wenn Sie das Paket installieren, speichert NPM den Bereich der zulässigen Revisionen einer Abhängigkeit anstelle einer bestimmten Revision (Semver). NPM versucht, die neueste Version der Abhängigkeit innerhalb des angegebenen Bereichs zu aktualisieren (dh nicht brechende Patch-Updates). Bei diesem Ansatz gibt es zwei Probleme.
Abhängigkeitsautoren veröffentlichen möglicherweise Patch-Versionsaktualisierungen, während sie tatsächlich eine wichtige Änderung einführen, die sich auf Ihr Projekt auswirkt.
Zwei Entwickler, die npm install
zu unterschiedlichen Zeiten ausgeführt werden, erhalten möglicherweise unterschiedliche Abhängigkeiten. Dies kann dazu führen, dass ein Fehler in zwei genau gleichen Umgebungen nicht reproduzierbar ist. Dies kann beispielsweise zu Problemen mit der Build-Stabilität von CI-Servern führen.
Garn hingegen geht den Weg der maximalen Vorhersagbarkeit. Es wird eine yarn.lock
Datei erstellt , um die genauen Abhängigkeitsversionen zu speichern . Wenn diese Datei vorhanden ist, werden Garne verwendet, die in gespeichert sind, yarn.lock
anstatt Versionen von aufzulösen package.json
. Diese Strategie garantiert, dass keines der oben beschriebenen Probleme auftritt.
yarn.lock
ähnelt dem npm-shrinkwrap.json
, was per npm shrinkwrap
Befehl erstellt werden kann . Überprüfen Sie diese Antwort und erläutern Sie die Unterschiede zwischen diesen beiden Dateien.