Come rimuovere le dipendenze non utilizzate dal compositore?


210

Ho installato un pacchetto con compositore e ha installato molti altri pacchetti come dipendenze.

Ora ho disinstallato il pacchetto principale con composer remove packageauthor/packagename, ma non sono state rimosse tutte le vecchie dipendenze. Mi aspettavo che il compositore potesse ripulire e conservare solo i pacchetti richiesti in base composer.jsone le relative dipendenze.

Come posso forzare il compositore a ripulire e rimuovere tutti i pacchetti inutilizzati?

Risposte:


377

Il modo giusto per farlo è:

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

Devo ammettere che la bandiera qui non è abbastanza ovvia su cosa farà.

Aggiornare

composer remove jenssegers/mongodb

A partire da v1.0.0-beta2 --update-with-dependencies è l'impostazione predefinita e non è più richiesta.


grazie a @Yehosef per aver avviato il problema su github dove è stata fornita una soluzione, ma dato che non ha aggiornato la sua risposta ho deciso di scriverne uno per comodità di tutti
— Denis Pshenov,

Grazie, non ho avuto la fine della loro discussione.
— Lorenz Meyer,

3
Una cosa da notare: se l'hai già fatto composer remove …, ma --update-with-dependencieshai dimenticato fino a quando non ti imbatti in questa domanda - le chiamate successive a composer removenon uccideranno tutte le dipendenze. Dovrai tornare, compositore install, quindicomposer remove --update-with-dependencies
— Mike G,

Ora ricevo il seguente messaggio: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
Che ne dite di pulizia dopo la rimozione di un pacchetto? - Ecco dove arriva la risposta di @LorenzMeyer: Complimenti composer updateper questa risposta a @LorenzMeyer
— Allen Linatoc,

29

In effetti, è molto semplice.

composer update

farà tutto questo per te, ma aggiornerà anche gli altri pacchetti.

Per rimuovere un pacchetto senza aggiornare gli altri, specificare quel pacchetto nel comando, ad esempio:

composer update monolog/monolog

rimuoverà il monolog/monologpacchetto.

Tuttavia, potrebbero rimanere alcune cartelle o file vuoti che non possono essere rimossi automaticamente e che devono essere rimossi manualmente.


8
la parte sfortunata di questo è che ti costringe ad aggiornare i tuoi pacchetti invece di rimuovere solo le vecchie versioni. Ad esempio, se ho due pacchetti AAA / aaa ~ 1 e versione BBB / bbb ~ 2 e sono attualmente alla versione 1.0 di AAA / aaa e hanno rilasciato 1.1, quindi quando elimino BBB / bbb sono automaticamente aggiornato (che potrebbe non essere quello che volevo fare ..)
— Yehosef,

Hai ragione. Se hai una soluzione migliore, torna indietro e pubblicalo come risposta.
— Lorenz Meyer,

3
Non ancora - voglio solo sottolineare per altri una trappola di questo approccio.
— Yehosef,

dovrebbe davvero essere una bandiera sull'installazione del compositore .. qualcosa del genere--prune
— Yehosef,

1
se ti piace l'idea puoi
— votarci

20

i seguenti comandi faranno lo stesso perfettamente

rm -rf vendor

composer install 

2
Questa sembra essere l'opzione più pulita. Elimina la directory dei fornitori e lascia che Composer tenga tutto aggiornato.
— Machavity,

4
questo è lo stile "salva il mio giorno" di
— npm

composer installcancellerà automaticamente i pacchetti non utilizzati
— Yidir l'

10

Esegui solo composer install: farà sì che la tua vendordirectory rifletta le dipendenze nel composer.lockfile.

In altre parole: eliminerà qualsiasi fornitore mancante composer.lock.

Si prega di aggiornare il compositore stesso prima di eseguire questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.