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.