Wie entferne ich nicht verwendete Abhängigkeiten vom Komponisten?


209

Ich habe ein Paket mit Composer installiert und viele andere Pakete als Abhängigkeiten installiert.

Jetzt habe ich das Hauptpaket mit deinstalliert composer remove packageauthor/packagename, aber alle alten Abhängigkeiten wurden nicht entfernt. Ich hatte erwartet, dass der Komponist bereinigt und nur Pakete behält, die entsprechend composer.jsonund deren Abhängigkeiten benötigt werden.

Wie kann ich den Komponisten zwingen, alle nicht verwendeten Pakete zu bereinigen und zu entfernen?

Antworten:


374

Der richtige Weg, dies zu tun, ist:

composer remove jenssegers/mongodb --update-with-dependencies

Ich muss zugeben, dass die Flagge hier nicht ganz klar ist, was sie tun wird.

Aktualisieren

composer remove jenssegers/mongodb

Ab v1.0.0-beta2 --update-with-dependencies ist die Standardeinstellung und wird nicht mehr benötigt.


Vielen Dank an @Yehosef für den Start des Problems auf Github, wo eine Lösung bereitgestellt wurde, aber da er seine Antwort nicht aktualisiert hat, habe ich beschlossen, meine eigene zu schreiben
Denis Pshenov

Danke, ich habe das Ende ihrer Diskussion nicht erreicht.
Lorenz Meyer

3
Eine Sache zu beachten: Wenn Sie dies bereits getan haben composer remove …, dies aber vergessen haben, --update-with-dependenciesbis Sie über diese Frage stolpern - nachfolgende Aufrufe von composer removewerden nicht alle Abhängigkeiten aufheben. Sie müssen zurückkehren, Komponist install, danncomposer remove --update-with-dependencies
Mike G

Jetzt bekomme ich folgende Nachricht:You are using the deprecated option "update-with-dependencies". This is now default behaviour. The --no-update-with-dependencies option can be used to remove a package without its dependencies
Pathros

4
Wie wäre es mit einer Bereinigung nach dem Entfernen eines Pakets? - Hier kommt die Antwort composer updatevon @LorenzMeyer ins Spiel : Daumen hoch zu dieser Antwort auf @LorenzMeyer
Allen Linatoc

29

In der Tat ist es sehr einfach.

composer update

wird dies alles für Sie tun, aber es wird auch die anderen Pakete aktualisieren.

Um ein Paket zu entfernen, ohne die anderen zu aktualisieren, geben Sie dieses Paket im Befehl an, zum Beispiel:

composer update monolog/monolog

wird das monolog/monologPaket entfernen .

Es können jedoch einige leere Ordner oder Dateien verbleiben, die nicht automatisch entfernt werden können und die manuell entfernt werden müssen.


8
Das Unglückliche daran ist, dass Sie gezwungen sind, Ihre Pakete zu aktualisieren, anstatt nur alte Versionen zu entfernen. Wenn ich beispielsweise zwei Pakete AAA / aaa ~ 1 und Version BBB / bbb ~ 2 habe und derzeit Version 1.0 von AAA / aaa bin und sie 1.1 veröffentlicht haben, werde ich beim Löschen von BBB / bbb automatisch aktualisiert (was möglicherweise nicht der Fall ist) sei was ich vorhatte zu tun ..)
Yehosef

Du hast recht. Wenn Sie eine bessere Lösung haben, kommen Sie zurück und veröffentlichen Sie sie als Antwort.
Lorenz Meyer

3
Ich weiß es noch nicht - ich möchte nur andere auf eine Falle dieses Ansatzes hinweisen.
Yehosef

Es sollte wirklich eine Flagge auf der Komponisteninstallation sein. So etwas wie--prune
Yehosef

1
Wenn Ihnen die Idee gefällt, können Sie darüber abstimmen - github.com/composer/composer/issues/3751
Yehosef

20

Die folgenden Befehle machen dasselbe perfekt

rm -rf vendor

composer install 

2
Dies scheint die sauberste Option zu sein. Löschen Sie das Anbieterverzeichnis und lassen Sie Composer alles neu abrufen.
Machavity

4
Dies ist npm "Save My Day" -Stil;)
R34

composer installlöscht automatisch nicht verwendete Pakete
Yidir

10

Einfach ausführen composer install- Ihr vendorVerzeichnis spiegelt die Abhängigkeiten in der composer.lockDatei wider .

Mit anderen Worten - es wird jeder Anbieter gelöscht, der in fehlt composer.lock.

Bitte aktualisieren Sie den Composer selbst, bevor Sie dies ausführen.

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.