Jak usunąć nieużywane zależności z kompozytora?

209

Zainstalowałem pakiet z kompozytorem i zainstalowałem wiele innych pakietów jako zależności.

Teraz odinstalowałem pakiet główny composer remove packageauthor/packagename, ale wszystkie stare zależności nie zostały usunięte. Oczekiwałem, że kompozytor wyczyści i zatrzyma tylko pakiety, które są wymagane zgodnie z composer.jsonich zależnościami.

Jak zmusić kompozytora do wyczyszczenia i usunięcia wszystkich nieużywanych pakietów?

Lorenz Meyer
źródło

Odpowiedzi:

375

Właściwy sposób to zrobić:

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

Muszę przyznać, że flaga tutaj nie jest do końca oczywista, co zrobi.

Aktualizacja

composer remove jenssegers/mongodb

Od wersji 1.0.0-beta2 --update-with-dependencies jest ustawieniem domyślnym i nie jest już wymagany.

Denis Pshenov
źródło
dzięki @Yehosef za rozpoczęcie wydania na githubie, gdzie podano rozwiązanie, ale ponieważ nie zaktualizował swojej odpowiedzi, postanowiłem napisać własną dla wygody wszystkich
Denis Pshenov
Dzięki, nie skończyłem ich dyskusji.
Lorenz Meyer
3
Jedną rzecz do zapamiętania: jeśli już to zrobiłeś composer remove …, ale zapomniałeś, --update-with-dependenciesdopóki nie natkniesz się na to pytanie - kolejne połączenia composer removenie zabiją wszystkich zależności. Musisz się wycofać, kompozytorze install, a potemcomposer remove --update-with-dependencies
Mike G
Teraz dostaję następujący komunikat: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
Co powiesz na czyszczenie po usunięciu pakietu? - Właśnie tam wchodzi odpowiedź @LorenzMeyer: composer updateKciuk w górę do tej odpowiedzi do @LorenzMeyer
Allen Linatoc
29

W rzeczywistości jest to bardzo łatwe.

composer update

zrobi to wszystko za Ciebie, ale zaktualizuje również inne pakiety.

Aby usunąć pakiet bez aktualizacji pozostałych, określ ten pakiet w poleceniu, na przykład:

composer update monolog/monolog

usunie monolog/monologpaczkę.

Niemniej jednak mogą pozostać puste foldery lub pliki, których nie można automatycznie usunąć i które trzeba usunąć ręcznie.

Lorenz Meyer
źródło
8
niefortunne jest to, że zmusza cię do aktualizacji pakietów zamiast usuwania starych wersji. Na przykład, jeśli mam dwa pakiety AAA / aaa ~ 1 i wersję BBB / bbb ~ 2 i aktualnie jestem w wersji 1.0 AAA / aaa i wydali 1.1, to po usunięciu BBB / bbb jestem automatycznie aktualizowany (co może nie bądź tym, co zamierzałem zrobić ..)
Yehosef
Masz rację. Jeśli masz lepsze rozwiązanie, wróć i opublikuj je jako odpowiedź.
Lorenz Meyer
3
Nie wiem jeszcze - chcę tylko wskazać innym pułapkę takiego podejścia.
Yehosef
to naprawdę powinna być flaga na instalacji kompozytora .. coś w stylu--prune
Yehosef
1
jeśli podoba ci się pomysł, możesz na niego zagłosować
github.com/composer/composer/issues/3751
20

następujące polecenia zrobią to samo doskonale

rm -rf vendor

composer install 
Max Wen
źródło
2
To wydaje się być najczystszą opcją. Usuń katalog dostawców i pozwól Composer wyciągnąć wszystko na świeżo.
Machavity,
4
to jest styl npm „save my day”;)
r34
composer installautomatycznie usunie nieużywane pakiety
Yidir
10

Po prostu uruchom composer install- sprawi, że vendorkatalog będzie odzwierciedlał zależności w composer.lockpliku.

Innymi słowy - usunie każdego brakującego dostawcę composer.lock.

Zaktualizuj samego kompozytora przed uruchomieniem tego.

Valentas
źródło