Ich habe zwei Projekte auf meinem Git Repo Server. Die erste ist eine Bibliothek, die ich geschrieben habe, nennen wir sie foo/lib-bar
. Die zweite ist eine Anwendung, die diese Bibliothek foo/app-bar
verwendet. Derzeit befindet sich die Bibliothek in der Entwicklungsversion, daher sieht die composer.json
-Datei der Bibliothek wie folgt aus:
Die Anwendung verwendet diese Bibliothek und enthält daher die erforderliche Anforderung:
%Vor% Und alles ist glatt bis zu diesem Punkt: Sowohl composer install
als auch composer update
laufen wie erwartet, installieren die Abhängigkeit und ich kann sie in vendor/
Nun, die Dokumente sagt das
%Vor%Und für die Schritte, die zu dem fraglichen Problem führen:
Also, meine Bibliothek ist bereit für den Einsatz und kommt aus der Entwicklungsphase. Es wird auch zufällig in der Produktionsversion meiner Anwendung benötigt. Ich entferne das Suffix dev
aus der composer.json
-Datei meiner library , übergebe und schiebe die Datei und bin bereit, die Anwendung zu aktualisieren.
Mit dem composer.json
der Anwendung verschiebe ich die Bibliotheksabhängigkeit von require-dev
Sektion nach require
und entferne das dev
Suffix (alles wird kopiert, also gibt es keinen Tippfehler - ich habe es noch einmal überprüft und noch einmal überprüft ):
Jetzt starte ich composer update
und bekomme:
Ich nahm an, dass die neue Version nicht gefunden wurde, also löschte ich die alte Bibliothek manuell:
%Vor%und versuchte es von Grund auf neu zu installieren
%Vor%Aber dieses Mal gibt es mir:
%Vor% Es scheint also so zu sein, dass require-dev
funktioniert, aber require
nicht . Irgendwelche Vorschläge, was hier schief gegangen sein könnte?
require-dev
ist nicht der Ort, um Abhängigkeiten zu entwickeln. Es ist für Software gedacht, die nur in der Entwicklung verwendet wird, wie PHPUnit, Mockery usw., oder für Abhängigkeiten, die für sich selbst nützlich sind, aber in diesem Fall nur für die Entwicklung verwendet werden, wie die Client-Bibliothek für den Service eines Softwarepakets ( um in einem Testszenario einige echte Anfragen zu stellen.)
Also sollte Ihre Bibliothek nicht von Anfang an "require-dev" gewesen sein.
Eine andere Sache ist: Composer zieht die Version ab, wenn entsprechende Zweige und Tags verwendet , dh ein Zweig namens "1.0.x" in Ihrem Repository wird als Entwicklungszweig für alle 1.0-Versionen erkannt und alle Anforderungen für solche Versionen könnten möglicherweise von diesem Zweig erfüllt werden - vorausgesetzt, Sie erlauben Entwicklungsversionen entweder durch Setzen von "minimum-stability": "dev"
(was Entwicklungsversionen für ALLE Software erlauben würde - eher unbeabsichtigt) oder wenn Sie die Version "1.0.0@dev"
benötigen Ihre Software.
Die einzige Sache, die Ihr Composer-Setup derzeit unterbrechen könnte, ist, dass Sie explizit eine Version in der Bibliothek composer.json erwähnen, und dies ist eine Entwicklungsversion. Hast du diesen Versionshinweis entfernt? Sie sollten es entfernen, da das Leben leichter ist, wenn Composer die Versionen von den Tags in einem Repository erkennen kann, nicht indem sie in composer.json explizit erwähnt werden.
Stellen Sie abschließend sicher, dass Sie bei der Verwendung von Git das require
d-Version sollte der git-markierten Version entsprechen.
Tags und Links php composer-php