Sollte composer.lock der Versionskontrolle verpflichtet sein?


529

Ich bin ein wenig verwirrt mit der composer.lockVerwendung in einer Anwendung mit einem Repository.

Ich sah viele Leute sagen, dass wir nicht .gitignore composer.lockaus dem Repository sollten.

Wenn ich meine Bibliotheken in meiner Entwicklungsumgebung aktualisiere, werde ich eine neue haben, composer.lockaber ich kann sie nicht in die Produktion aktualisieren, oder?

Wird es nicht zu Konflikten in dieser Datei kommen?


1
Dieser Link ist jetzt tot @markus
Kyrre

Antworten:


673

Wenn Sie Ihre Bibliotheken aktualisieren, möchten Sie auch die Sperrdatei festschreiben. Grundsätzlich heißt es, dass Ihr Projekt an die spezifischen Versionen der von Ihnen verwendeten Bibliotheken gebunden ist.

Wenn Sie Ihre Änderungen festschreiben und jemand Ihren Code abruft und die Abhängigkeiten aktualisiert, sollte die Sperrdatei unverändert bleiben. Wenn es geändert wird, bedeutet dies, dass Sie eine neue Version von etwas haben.

Wenn Sie es im Repository haben, können Sie sicher sein, dass jeder Entwickler dieselben Versionen verwendet.


5
Ok, aber stellen Sie sich vor, wenn ich die Bibliotheken aus der Produktionsumgebung aktualisiere, wird composer.lock überschrieben, sodass ich bei einem nächsten Zug aus der Produktion aufgefordert werde, diese Datei zusammenzuführen ...
Pierre de LESPINAY,

7
Wenn die Datei composer.lock geändert wird, müssen Sie die Änderungen zurück in das Repository verschieben. Wenn Sie die Software an bestimmte Versionen der Bibliotheken binden möchten, tun Sie dies explizit in der Konfiguration. Auf diese Weise wird sich das Schloss niemals ändern. Stellen Sie sich die Sperrdatei als Indikator für ein Abhängigkeitsverwaltungsproblem vor, das auf die eine oder andere Weise gelöst werden muss.
Meza

361
In der Produktion sollten Sie Ihre Abhängigkeiten nicht aktualisieren, sondern ausführen, composer installdie aus der Sperrdatei lesen und nichts ändern.
Seldaek

112
"In der Produktion sollten Sie Ihre Abhängigkeiten nicht aktualisieren" sollte in Großbuchstaben geschrieben werden
Joaquín L. Robles

75
@ JoaquínL.Robles IN DER PRODUKTION SOLLTEN SIE IHRE ABHÄNGIGKEITEN NICHT AKTUALISIEREN! :)
Елин Й.

201

Für Anwendungen / Projekte : Auf jeden Fall ja.

In der Dokumentation des Komponisten heißt es dazu (mit Schwerpunkt):

Übernehmen Sie die composer.lock Ihrer Anwendung (zusammen mit composer.json) in die Versionskontrolle.

Wie @meza sagte: Sie sollten die Sperrdatei festschreiben, damit Sie und Ihre Mitarbeiter an denselben Versionen arbeiten und verhindern, dass Sie sagen: "Aber es hat auf meinem Computer funktioniert". ;-);

Für Bibliotheken : Wahrscheinlich nicht.

In der Dokumentation des Komponisten finden Sie Hinweise zu diesem Thema:

Hinweis: Für Bibliotheken wird nicht unbedingt empfohlen, die Sperrdatei (...) festzuschreiben.

Und sagt hier :

Für Ihre Bibliothek können Sie die Datei composer.lock festschreiben, wenn Sie möchten. Dies kann Ihrem Team helfen, immer mit denselben Abhängigkeitsversionen zu testen. Diese Sperrdatei hat jedoch keine Auswirkungen auf andere Projekte, die davon abhängen. Es wirkt sich nur auf das Hauptprojekt aus.

Für Bibliotheken stimme ich der Antwort von @Josh Johnson zu.


Warum Projekte bei der Arbeit anders behandeln als "Bibliotheken"?
Josh Johnson

4
Vielleicht war die Verwendung des Wortes "Mitarbeiter" hier verwirrend, ich habe es in Mitarbeiter geändert. Der Hauptunterschied ist "Hauptprojekt" gegenüber Bibliothek, bei der ein Hauptprojekt aus einer oder mehreren Bibliotheken und Code besteht, um diese zu integrieren. Beim Ausführen von Composer aus dem Hauptprojekt wird die Datei composer.lock einer Bibliothek nicht verwendet, sodass die Abhängigkeiten in der neuesten Version installiert werden. Ich denke, das sollte beim Testen Ihrer Bibliothek ähnlich sein.
Jeroen Fiege

2
Das Festschreiben der Sperrdatei mit einer Bibliothek ist wahrscheinlich eine gute Sache - die Sperrdatei dokumentiert, welche Versionen von Abhängigkeiten installiert wurden, als die Testsuite ausgeführt wurde. Dies ist besonders wichtig in einem Team und insbesondere in Umgebungen mit kontinuierlicher Integration.
mindplay.dk

Bei der Wiedereingliederung in Trunk 2-Zweige, in denen über Composer neue Pakete installiert wurden, können nicht triviale Konflikte auftreten.
Ist gerade

2
@tonix, ich kann das mit einiger Autorität beantworten! Der Grund, warum ich composer.lock nicht für meine Bibliotheken festschreibe, ist, dass mein CI jeden Abend Master erstellt, egal was passiert. Es garantiert, dass das CI fehlschlägt, wenn eine der Abhängigkeiten der Bibliothek Aktualisierungsprobleme aufweist, die ein Benutzer der Bibliothek haben würde. Funktioniert gut!
Theodore R. Smith

86

Nachdem ich es für einige Projekte in beide Richtungen getan habe, bin ich der Meinung, dass dies composer.locknicht als Teil des Projekts festgelegt werden sollte.

composer.lockEs werden Metadaten erstellt, die nicht Teil des Projekts sind. Der Status von Abhängigkeiten sollte durch die Versionierung (entweder manuell oder als Teil Ihres automatisierten Erstellungsprozesses) und nicht willkürlich vom letzten Entwickler gesteuert werden, der sie aktualisiert und die Sperrdatei festschreibt.

Wenn Sie befürchten, dass sich Ihre Abhängigkeiten zwischen Composer-Updates ändern, haben Sie kein Vertrauen in Ihr Versionsschema. Versionen (1.0, 1.1, 1.2 usw.) sollten unveränderlich sein und Sie sollten Platzhalter "dev-" und "X. *" außerhalb der anfänglichen Feature-Entwicklung vermeiden.

Das Festschreiben der Sperrdatei ist eine Regression für Ihr Abhängigkeitsverwaltungssystem, da die Abhängigkeitsversion nun wieder implizit definiert wurde.

Außerdem sollte Ihr Projekt niemals neu erstellt werden müssen oder seine Abhängigkeiten in jeder Umgebung, insbesondere bei Produkten, neu erfasst werden müssen. Ihr Ergebnis (tar, zip, phar, ein Verzeichnis usw.) sollte unveränderlich sein und durch Umgebungen beworben werden, ohne sich zu ändern.


19
Einverstanden. Ich halte es für sinnvoller, Abhängigkeitsversionen anzugeben, in composer.jsondenen die erforderlichen Versionen expliziter angegeben sind. Wenn Sie jedoch keine bestimmten Versionen festlegen, sollten Sie die festschreiben composer.lock. Es ist verwirrend, wenn sich die in angegebenen Versionen von den gemäß a composer.jsoninstallierten unterscheiden composer.lock. Es hängt auch von der App (Inhouse- oder General Release) und ihrem Entwicklungszyklus ab. In den Composer-Dokumenten heißt es natürlich in Fettdruck: "Übernehmen Sie die composer.lock Ihrer Anwendung (zusammen mit composer.json) in die Versionskontrolle" . Wählen Sie mit Bedacht =)
Quinn Comendant

10
Nach langem Suchen habe ich in diesem Punkt entschieden, dass die Komponistendokumente falsch sind :) Ich habe die Regel, dass ich dem VCS kein generiertes Material hinzufüge. Ich erlaube dem Build-Prozess, damit umzugehen.
Josh Johnson

10
Wird der mit Ihren biomechanischen Tastendrücken erstellte Code nicht "generiertes Material"? Ich bin mir nicht sicher, ob dies ein solides Kriterium für eine Richtlinie ist. =)
Quinn Comendant

5
@borfast Ich weiß, dass ich etwas spät zum Gespräch bin, also haben Sie dies vielleicht zu diesem Zeitpunkt gesehen, aber Sie können einen Hash in der composer.json. In den requireAbschnitt können Sie setzen : "repo": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e". Dies wird 1) zum Zweig gehen, 2) diesen Hash auschecken, 3) wenn der Hash nicht im Zweig gefunden wird, jedoch den Kopf des angegebenen Zweigs auschecken (in diesem Fall Master).
CEPA

5
@CEPA - Das ist seltsam. Ich hätte erwartet, dass es fehlschlägt, wenn der Hash nicht gefunden werden könnte. Scheint gefährlich.
Nathan JB

31
  1. Sie sollten Ihre Abhängigkeiten nicht direkt von der Produktion aktualisieren.
  2. Sie sollten die Versionskontrolle Ihrer Datei composer.lock durchführen .
  3. Sie sollten Ihre tatsächlichen Abhängigkeiten nicht versionieren.

1. Sie sollten Ihre Abhängigkeiten nicht direkt von Production aktualisieren , da Sie nicht wissen, wie sich dies auf die Stabilität Ihres Codes auswirkt. Es könnten Fehler mit den neuen Abhängigkeiten auftreten, es könnte das Verhalten des Codes ändern, das sich auf Ihre eigenen auswirkt, es könnte mit anderen Abhängigkeiten nicht kompatibel sein usw. Sie sollten dies in einer Entwicklungsumgebung tun, gefolgt von ordnungsgemäßen QS- und Regressionstests usw. .

2. Sie sollten die Versionskontrolle Ihrer Datei composer.lock durchführen , da hier Informationen zu Ihren Abhängigkeiten und zu den Abhängigkeiten Ihrer Abhängigkeiten gespeichert werden, mit denen Sie den aktuellen Status des Codes replizieren können. Dies ist wichtig, da alle Ihre Tests und Entwicklungen anhand eines bestimmten Codes durchgeführt wurden. Wenn Sie sich nicht um die tatsächliche Version des Codes kümmern, die Sie haben, können Sie Codeänderungen in Ihre Anwendung hochladen und nicht testen. Wenn Sie Ihre Abhängigkeitsversionen aktualisieren, sollte dies bereitwillig geschehen, und Sie sollten die erforderliche Sorgfalt walten lassen, um sicherzustellen, dass alles noch funktioniert. Wenn Sie ein oder zwei Stunden Betriebszeit verlieren, um zu einer früheren Version zurückzukehren, können Sie viel Geld kosten.

Eines der Argumente, die Sie sehen werden, wenn Sie composer.lock nicht benötigen, ist, dass Sie die genaue Version festlegen können, die Sie in Ihrer composer.json- Datei benötigen , und dass sie auf diese Weise jedes Mal, wenn jemand ausgeführt composer installwird, gleich installiert werden Code. Dies ist nicht der Fall, da Ihre Abhängigkeiten ihre eigenen Abhängigkeiten haben und ihre Konfiguration möglicherweise in einem Format angegeben wird, das Aktualisierungen von Subversionen oder sogar ganzen Versionen ermöglicht.

Dies bedeutet , dass selbst dann , wenn Sie angeben , dass Sie Laravel 4.1.31 in Ihrem wollen composer.json , Laravel in seiner composer.json Datei ihre eigenen Abhängigkeiten als Symfony Ereignis-Dispatcher benötigt haben könnte: 2. *. Mit dieser Art von Konfiguration könnten Sie Laravel 4.1.31 mit Symfony Event-Dispatcher 2.4.1 erhalten, und jemand anderes in Ihrem Team könnte Laravel 4.1.31 mit Event-Dispatcher 2.6.5 haben. Dies hängt alles davon ab, wann war das letzte Mal, dass Sie die Composer-Installation ausgeführt haben.

Wenn Sie also Ihre composer.lock- Datei im Versionssystem haben, wird die genaue Version dieser Unterabhängigkeiten gespeichert. Wenn Sie und Ihr Teamkollege eine Composer-Installation durchführen (auf diese Weise installieren Sie Ihre Abhängigkeiten basierend auf einem Composer. Sperre ) Sie erhalten beide die gleichen Versionen.

Was ist, wenn Sie aktualisieren möchten? Führen Sie dann in Ihrer Entwicklungsumgebung Folgendes aus: composer updateDies generiert eine neue composer.lock- Datei (falls es etwas Neues gibt) und nachdem Sie es getestet haben, und QS-Test und Regression testen Sie es und so weiter. Sie können darauf drängen, dass alle anderen die neue composer.lock herunterladen , da sie sicher aktualisiert werden kann.

3. Sie sollten Ihre tatsächlichen Abhängigkeiten nicht versionieren , da dies keinen Sinn ergibt. Mit composer.lock können Sie die genaue Version der Abhängigkeiten installieren und müssen sie nicht festschreiben. Warum sollten Sie Ihrem Repo 10000 Dateien mit Abhängigkeiten hinzufügen, wenn Sie diese nicht aktualisieren sollen? Wenn Sie eines davon ändern müssen, sollten Sie es teilen und dort Ihre Änderungen vornehmen. Wenn Sie sich Sorgen machen, dass Sie bei jedem Build oder Release die tatsächlichen Abhängigkeiten abrufen müssen, bietet Composer verschiedene Möglichkeiten, um dieses Problem, den Cache, die Zip-Dateien usw. zu beheben.


1
Vielen Dank, ich denke, diese Antwort erklärt, warum Sie composer.lock versionieren sollten, und wenn nicht, was die Konsequenzen sind und ob Sie damit leben können.
José Lozano Hernandez

8

Anschließend legen Sie das composer.jsonfür Ihr Projekt fest, und alle anderen Mitglieder Ihres Teams können die Composer-Installation ausführen, um Ihre Projektabhängigkeiten zu installieren.

Der Zweck der Sperrdatei besteht darin, die genauen Versionen aufzuzeichnen, die installiert sind, damit sie erneut installiert werden können. Dies bedeutet, dass Sie, wenn Sie eine Versionsspezifikation von 1. * haben und Ihr Mitarbeiter das Composer-Update ausführt, das 1.2.4 installiert und dann die Datei composer.lock festschreibt, bei der Installation von Composer sogar 1.2.4 erhalten wenn 1.3.0 veröffentlicht wurde. Dies stellt sicher, dass jeder, der an dem Projekt arbeitet, genau dieselbe Version hat.

Dies bedeutet, dass, wenn seit der letzten Installation eines Komponisten etwas festgeschrieben wurde, ohne Sperrdatei neuer Code von Drittanbietern abgerufen wird .

Auch dies ist ein Problem, wenn Sie Bedenken haben, dass Ihr Code beschädigt wird. Dies ist einer der Gründe, warum es wichtig ist, sich Composer als zentriert um die Datei composer.lock vorzustellen.

Quelle: Komponist: Alles dreht sich um die Sperrdatei .


Übernehmen Sie die composer.lock Ihrer Anwendung (zusammen mit composer.json) in die Versionskontrolle. Dies ist wichtig, da der Installationsbefehl prüft, ob eine Sperrdatei vorhanden ist, und wenn dies der Fall ist, die dort angegebenen Versionen herunterlädt (unabhängig davon, was composer.json sagt). Dies bedeutet, dass jeder, der das Projekt einrichtet, genau dieselbe Version der Abhängigkeiten herunterlädt. Ihr CI-Server, Produktionsmaschinen, andere Entwickler in Ihrem Team, alles und jeder läuft unter denselben Abhängigkeiten, wodurch das Risiko von Fehlern verringert wird, die nur einige Teile der Bereitstellungen betreffen. Selbst wenn Sie alleine entwickeln, können Sie in sechs Monaten bei der Neuinstallation des Projekts sicher sein, dass die installierten Abhängigkeiten weiterhin funktionieren, auch wenn Ihre Abhängigkeiten seitdem viele neue Versionen veröffentlicht haben.

Quelle: Composer - Grundlegende Verwendung .


1

Wenn Sie Bedenken haben, dass Ihr Code beschädigt wird, sollten Sie dies composer.lockIhrem Versionskontrollsystem zuweisen, um sicherzustellen, dass alle Ihre Projektmitarbeiter dieselbe Version des Codes verwenden. Ohne Sperrdatei wird jedes Mal ein neuer Code von Drittanbietern abgerufen.

Die Ausnahme ist, wenn Sie Meta-Apps verwenden, Bibliotheken, in denen die Abhängigkeiten bei der Installation aktualisiert werden sollten (wie die Zend Framework 2 Skeleton App ). Ziel ist es daher, jedes Mal, wenn Sie mit der Entwicklung beginnen möchten, die neuesten Abhängigkeiten zu ermitteln.

Quelle: Komponist: Alles dreht sich um die Sperrdatei

Siehe auch: Was sind die Unterschiede zwischen Composer-Update und Composer-Installation?


1

Darauf gibt es keine genaue Antwort.

Im Allgemeinen sollte Composer nicht das tun, was das Build-System tun soll, und Sie sollten Composer.lock nicht in VCS einfügen. Der Komponist könnte es seltsamerweise rückwärts haben. Endbenutzer sollten keine Sperrdateien verwenden, anstatt zu produzieren. Normalerweise speichert Ihr Build-System Snapshots, wiederverwendbare Verzeichnisse usw. und nicht jedes Mal ein leeres Verzeichnis. Leute, die eine Bibliothek von Composer auschecken, möchten möglicherweise, dass diese Bibliothek eine Sperre verwendet, damit die Abhängigkeiten, die lib lädt, getestet wurden.

Auf der anderen Seite erhöht dies die Belastung der Versionsverwaltung erheblich, da Sie mit ziemlicher Sicherheit mehrere Versionen jeder Bibliothek wünschen, da Abhängigkeiten streng gesperrt sind. Wenn es wahrscheinlich ist, dass jede Bibliothek eine etwas andere Version hat, benötigen Sie Unterstützung für mehrere Bibliotheksversionen, und Sie können auch schnell erkennen, wie groß die benötigten Abhängigkeiten sind, und daher den Ratschlag, sie auf dem Blatt zu halten.

Wenn ich das berücksichtige, finde ich Sperrdateien weder für Bibliotheken noch für Ihre eigenen Arbeitsverzeichnisse wirklich nützlich. Es wird nur für mich in meiner Build- / Testplattform verwendet, die alle extern erworbenen Assets beibehält und sie nur auf Anfrage aktualisiert und wiederholbare Builds zum Testen, Erstellen und Bereitstellen bereitstellt. Während dies in VCS beibehalten werden kann, wird es nicht immer im Quellbaum gespeichert. Die Build-Bäume befinden sich entweder an einer anderen Stelle in der VCS-Struktur oder werden von einem anderen System an einem anderen Ort verwaltet. Wenn es in einem VCS gespeichert ist, ist es fraglich, ob es im selben Repo wie die Quellbäume aufbewahrt werden soll oder nicht, da sonst jeder Pull eine Menge Build-Assets einbringen kann. Ich mag es sehr, alles in einem übersichtlichen Repo zu haben, mit Ausnahme von Produktion / sensiblen Anmeldeinformationen und Aufblähen.

SVN kann es besser als Git, da es Sie nicht zwingt, das gesamte Repo zu erwerben (obwohl ich vermute, dass dies auch für Git nicht unbedingt erforderlich ist, aber die Unterstützung dafür ist begrenzt und wird nicht häufig verwendet). Einfache Build-Repos sind normalerweise nur ein Overlay-Zweig, in den Sie den Build-Baum zusammenführen / exportieren. Einige Leute kombinieren externe Ressourcen in ihrem Quellbaum oder trennen weitere externe, Build- und Quellbäume. Es dient normalerweise zwei Zwecken: Build-Caching und wiederholbare Builds. Manchmal ermöglicht es jedoch, es auf mindestens einer bestimmten Ebene getrennt zu halten, auch neue / leere Builds und mehrere Builds.

Hierfür gibt es eine Reihe von Strategien, von denen keine besonders gut dazu geeignet ist, die Quellenliste beizubehalten, es sei denn, Sie behalten die externe Quelle in Ihrem Quellbaum.

Sie haben auch Dinge wie Hashes in der Datei. Wie wird das zusammengeführt, wenn zwei Personen Pakete aktualisieren? Das allein sollte Sie denken lassen, dass dies möglicherweise falsch ausgelegt ist.

Die Argumente, die die Leute für Sperrdateien vorbringen, sind Fälle, in denen sie das Problem sehr spezifisch und restriktiv betrachtet haben. Willst du wiederholbare Builds und konsistente Builds? Fügen Sie den Herstellerordner in VCS ein. Dann beschleunigen Sie auch das Abrufen von Assets und müssen sich beim Erstellen nicht auf potenziell defekte externe Ressourcen verlassen. Keine der von mir erstellten Build- und Deployment-Pipelines erfordert externen Zugriff, sofern dies nicht unbedingt erforderlich ist. Wenn Sie eine externe Ressource aktualisieren müssen, ist dies nur einmal der Fall. Was Composer zu erreichen versucht, ist für ein verteiltes System sinnvoll, außer wie oben erwähnt, macht es keinen Sinn, da es für Bibliotheksaktualisierungen mit häufigen Konflikten und Aktualisierungen, die so langsam sind wie das am langsamsten zu aktualisierende Paket, zur Hölle der Bibliotheksabhängigkeit führen würde.

Zusätzlich aktualisiere ich wild. Jedes Mal, wenn ich mich entwickle, aktualisiere und teste ich alles. Es gibt ein sehr sehr kleines Fenster, in das sich eine signifikante Versionsdrift einschleichen kann. Auch realistisch gesehen, wenn die semantische Versionierung beibehalten wird, was normalerweise für Komponisten gilt, werden nicht so viele Kompatibilitätsprobleme oder -brüche auftreten.

In composer.json legen Sie die gewünschten Pakete und deren Versionen ab. Dort können Sie die Versionen sperren. Diese Pakete haben jedoch auch Abhängigkeiten mit dynamischen Versionen, die nicht von composer.json gesperrt werden (obwohl ich nicht verstehe, warum Sie sie nicht auch selbst dort ablegen können, wenn Sie möchten, dass sie versioniert werden), sodass jemand anderes Composer installiert bekommt etwas anderes ohne das Schloss. Das interessiert dich vielleicht nicht sehr, oder es interessiert dich, es kommt darauf an. Sollte es dich interessieren? Wahrscheinlich zumindest ein wenig genug, um sicherzustellen, dass Sie sich in jeder Situation und bei möglichen Auswirkungen darüber im Klaren sind, aber es ist möglicherweise auch kein Problem, wenn Sie immer die Zeit haben, zuerst DRY auszuführen und alles zu reparieren, was aktualisiert wurde.

Der lästige Komponist versucht zu vermeiden, dass er manchmal einfach nicht da ist, und der Ärger, den Komponistensperrdateien verursachen können, ist erheblich. Sie haben absolut kein Recht, Benutzern zu sagen, was sie in Bezug auf Build- oder Quell-Assets tun sollen oder nicht (ob sie in VCS getrennt werden sollen), da dies nicht ihre Sache ist, sie sind nicht der Chef von Ihnen oder mir. "Komponist sagt" ist keine Autorität, sie sind weder Ihr Vorgesetzter noch geben sie jemandem eine Überlegenheit in diesem Bereich. Nur Sie kennen Ihre reale Situation und was dafür am besten ist. Sie empfehlen jedoch möglicherweise eine Standardmaßnahme für Benutzer, die nicht verstehen, wie die Dinge funktionieren. In diesem Fall möchten Sie dies möglicherweise befolgen, aber ich persönlich denke nicht, dass ' Ein echter Ersatz dafür, zu wissen, wie die Dinge funktionieren und in der Lage zu sein, Ihre Anforderungen richtig zu trainieren. Letztendlich ist ihre Antwort auf diese Frage eine gute Vermutung. Die Leute, die Komponisten machen, wissen nicht, wo Sie Ihren Komponisten aufbewahren sollen. Ihre einzige Verantwortung ist es, Ihnen zu sagen, was es ist und was es tut. Darüber hinaus müssen Sie entscheiden, was für Sie am besten ist.

Das Behalten der Sperrdatei ist für die Benutzerfreundlichkeit problematisch, da Composer sehr geheim ist, ob es Sperr- oder JSON-Dateien verwendet, und es nicht immer zu gut ist, beide zusammen zu verwenden. Wenn Sie install ausführen, wird nur die Sperrdatei verwendet, die angezeigt wird. Wenn Sie also etwas zu composer.json hinzufügen, wird es nicht installiert, da es sich nicht in Ihrer Sperre befindet. Es ist überhaupt nicht intuitiv, was Operationen wirklich tun und was sie in Bezug auf die json / lock-Datei tun, und manchmal scheint es nicht einmal sinnvoll zu sein (Hilfe sagt, dass die Installation einen Paketnamen nimmt, aber beim Versuch, sie zu verwenden, sagt sie nein ).

Um die Sperre zu aktualisieren oder Änderungen von json im Grunde zu übernehmen, müssen Sie update verwenden und möchten möglicherweise nicht alles aktualisieren. Das Schloss hat Vorrang bei der Auswahl der zu installierenden Elemente. Wenn es eine Sperrdatei gibt, wird diese verwendet. Sie können das Update etwas einschränken, aber das System ist immer noch ein Chaos.

Das Aktualisieren braucht ein Alter, viel RAM. Ich vermute auch, wenn Sie ein Projekt aufgreifen, das eine Weile nicht berührt wurde, dass es von den Versionen, die es hat, aussah, von denen es im Laufe der Zeit mehr geben wird, und es wahrscheinlich nicht effizient macht, was es nur erwürgt.

Sie sind sehr, sehr hinterhältig, wenn es darum geht, geheime zusammengesetzte Befehle zu haben, von denen man nicht erwarten kann, dass sie zusammengesetzt sind. Standardmäßig wird der Befehl zum Entfernen des Komponisten angezeigt, um beispielsweise dem Komponisten-Update und dem Komponisten-Entfernen zuzuordnen.

Die Frage, die Sie wirklich stellen müssen, ist nicht, ob Sie die Sperre in Ihrem Quellbaum behalten sollen oder ob Sie sie irgendwo auf irgendeine Weise beibehalten sollen oder nicht, sondern ob Sie fragen sollten, was sie tatsächlich tut, dann können Sie selbst entscheiden wann und wo Sie es beibehalten müssen.

Ich werde darauf hinweisen, dass die Fähigkeit, die Sperre zu haben, eine große Bequemlichkeit ist, wenn Sie eine robuste Strategie für die Persistenz externer Abhängigkeiten haben, da sie die Informationen verfolgt, die nützlich sind, um diese (die Ursprünge) zu verfolgen und zu aktualisieren, aber wenn Sie dies nicht tun dann ist es weder hier noch da. Es ist nicht nützlich, wenn es als obligatorische Option in den Hals gedrückt wird, damit es Ihre Quellbäume verschmutzt. Es ist eine sehr häufige Sache, in älteren Codebasen zu finden, in denen viele Änderungen an composer.json vorgenommen wurden, die nicht wirklich angewendet wurden und fehlerhaft sind, wenn Benutzer versuchen, Composer zu verwenden. Kein Composer.lock, kein Desync-Problem.


0

Ja offensichtlich.

Dies liegt daran, dass ein lokal installierter Composer der Datei composer.lock gegenüber composer.json den ersten Vorzug gibt.

Wenn die Sperrdatei in vcs nicht verfügbar ist, zeigt der Composer auf die Datei composer.json, um die neuesten Abhängigkeiten oder Versionen zu installieren.

Die Datei composer.lock behält die Abhängigkeit eingehender bei, dh sie verweist auf das tatsächliche Festschreiben der Version des Pakets, das wir in unsere Software aufnehmen. Daher ist dies eine der wichtigsten Dateien, die die Abhängigkeit genauer behandelt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.