ChatGPT解决这个技术问题 Extra ChatGPT

How to remove unused dependencies from composer?

I installed a package with composer, and it installed many other packages as dependencies.

Now I uninstalled the main package with composer remove packageauthor/packagename, but all the old dependencies were not removed. I expected composer to clean up and only keep packages that are required according to composer.json and their dependencies.

How can I force composer to clean up and remove all unused packages ?


u
user151841

The right way to do this is:

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

I must admit the flag here is not quite obvious as to what it will do.

Update

composer remove jenssegers/mongodb

As of v1.0.0-beta2 --update-with-dependencies is the default and is no longer required.


thanks to @Yehosef for starting the issue on github where a solution was provided, but since he did not update his answer I decided to write my own for everyones convenience
Thanks, I didn't get the end of their discussion.
One thing to note: If you've already composer remove …'d, but forgot the --update-with-dependencies until you stumble across this question — subsequent calls to composer remove won't kill all dependencies. You'll need to revert, composer install, then composer remove --update-with-dependencies
Now I get the following message: 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
How about cleanup after the removal of a package? -- That's where @LorenzMeyer answer goes in: composer update Thumbs up to this answer to @LorenzMeyer
L
Lorenz Meyer

In fact, it is very easy.

composer update

will do all this for you, but it will also update the other packages.

To remove a package without updating the others, specifiy that package in the command, for instance:

composer update monolog/monolog

will remove the monolog/monolog package.

Nevertheless, there may remain some empty folders or files that cannot be removed automatically, and that have to be removed manually.


the unfortunate part about this is that it forces you to update your packages instead of just removing old versions. Eg, If I have two packages AAA/aaa ~1 and version BBB/bbb ~2 and I am currently at version 1.0 of AAA/aaa and they released 1.1, then when I delete BBB/bbb I am automatically updated (which may not be what I was intending to do..)
You are right. If you have a better solution, come back and post it as an answer.
I don't yet - I just want to point out for others a pitfall of this approach.
it really should be an flag on the composer install .. something like --prune
if you like the idea you can vote on it - github.com/composer/composer/issues/3751
J
Jonas Staudenmeir

following commands will do the same perfectly

rm -rf vendor

composer install 

This seems to be the cleanest option. Delete the vendors directory and let Composer pull everything fresh.
this is npm "save my day" style ;)
composer install will automatically delete unused packages
V
Valentas

Just run composer install - it will make your vendor directory reflect dependencies in composer.lock file.

In other words - it will delete any vendor which is missing in composer.lock.

Please update the composer itself before running this.