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.