Comment supprimer les dépendances inutilisées du compositeur?

210

J'ai installé un package avec composer, et il a installé de nombreux autres packages en tant que dépendances.

Maintenant, j'ai désinstallé le package principal avec composer remove packageauthor/packagename, mais toutes les anciennes dépendances n'ont pas été supprimées. Je m'attendais à ce que le compositeur nettoie et ne conserve que les packages requis selon composer.jsonet leurs dépendances.

Comment puis-je forcer Composer à nettoyer et supprimer tous les packages inutilisés?

Lorenz Meyer
la source

Réponses:

377

La bonne façon de procéder est:

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

Je dois admettre que le drapeau ici n'est pas tout à fait évident quant à ce qu'il fera.

Mettre à jour

composer remove jenssegers/mongodb

Depuis la v1.0.0-beta2 --update-with-dependencies est la valeur par défaut et n'est plus nécessaire.

Denis Pshenov
la source
merci à @Yehosef d'avoir commencé le problème sur github où une solution a été fournie, mais comme il n'a pas mis à jour sa réponse, j'ai décidé d'écrire la mienne pour la commodité de tout le monde
Denis Pshenov
Merci, je n'ai pas eu la fin de leur discussion.
Lorenz Meyer
3
Une chose à noter: si vous l'avez déjà fait composer remove …, mais --update-with-dependenciesque vous l'avez oublié jusqu'à ce que vous tombiez sur cette question - les appels ultérieurs à composer removene tueront pas toutes les dépendances. Vous devrez revenir, compositeur install, puiscomposer remove --update-with-dependencies
Mike G
Maintenant, je reçois le message suivant: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
Que diriez-vous du nettoyage après la suppression d'un paquet? - C'est là que la réponse de @LorenzMeyer entre: Bravo composer updateà cette réponse à @LorenzMeyer
Allen Linatoc
29

En fait, c'est très simple.

composer update

fera tout cela pour vous, mais il mettra également à jour les autres packages.

Pour supprimer un package sans mettre à jour les autres, spécifiez ce package dans la commande, par exemple:

composer update monolog/monolog

supprimera le monolog/monologpaquet.

Néanmoins, il peut rester des dossiers ou fichiers vides qui ne peuvent pas être supprimés automatiquement et qui doivent être supprimés manuellement.

Lorenz Meyer
la source
8
la partie malheureuse à ce sujet est qu'elle vous oblige à mettre à jour vos packages au lieu de simplement supprimer les anciennes versions. Par exemple, si j'ai deux packages AAA / aaa ~ 1 et la version BBB / bbb ~ 2 et que je suis actuellement à la version 1.0 de AAA / aaa et qu'ils ont publié 1.1, alors lorsque je supprime BBB / bbb, je suis automatiquement mis à jour (ce qui peut ne pas être ce que j'avais l'intention de faire ..)
Yehosef
Vous avez raison. Si vous avez une meilleure solution, revenez et postez-la comme réponse.
Lorenz Meyer
3
Je ne le fais pas encore - je veux simplement signaler aux autres un écueil de cette approche.
Yehosef
ça devrait vraiment être un drapeau sur l'installation du compositeur .. quelque chose comme--prune
Yehosef
1
si vous aimez l'idée, vous pouvez voter dessus - github.com/composer/composer/issues/3751
Yehosef
20

les commandes suivantes feront la même chose parfaitement

rm -rf vendor

composer install 
Max Wen
la source
2
Cela semble être l'option la plus propre. Supprimez le répertoire des fournisseurs et laissez Composer récupérer tout.
Machavity
4
c'est le style "save my day" de npm;)
r34
composer installsupprimera automatiquement les packages inutilisés
Yidir
10

Exécutez simplement composer install- cela fera en sorte que votre vendorrépertoire reflète les dépendances dans le composer.lockfichier.

En d'autres termes, il supprimera tout fournisseur manquant composer.lock.

Veuillez mettre à jour le compositeur lui-même avant de l'exécuter.

Valentas
la source