如何从composer中删除未使用的依赖项?

Lor*_*yer 183 php composer-php

我安装了一个包含composer的包,并且它安装了许多其他包作为依赖项.

现在我卸载了主程序包composer remove packageauthor/packagename,但是没有删除所有旧的依赖项.我希望composer能够清理并只保留根据它们composer.json和依赖项所需的包.

如何强制编写器清理并删除所有未使用的包?

Den*_*nov 341

正确的方法是:

composer remove jenssegers/mongodb --update-with-dependencies
Run Code Online (Sandbox Code Playgroud)

我必须承认,这里的旗帜并不十分明显.

更新

v1.0.0开始,beta2 --update-with-dependencies是默认值,不再需要.

  • 有一点需要注意:如果你已经`composer remove ...`'d,但忘记了`--update-with-dependencies`,直到你偶然发现这个问题 - 后来对`composer remove`的调用不会杀死所有依赖项.你需要恢复,作曲家`install`,然后`composer remove --update-with-dependencies` (3认同)
  • **删除包后如何清理?** - 这是@LorenzMeyer回答的地方:``composer update``竖起对@LorenzMeyer的回答 (3认同)

Lor*_*yer 26

事实上,这很容易.

composer update
Run Code Online (Sandbox Code Playgroud)

将为您完成所有这些,但它也将更新其他包.

要删除包而不更新其他包,请在命令中指定该包,例如:

composer update monolog/monolog
Run Code Online (Sandbox Code Playgroud)

将删除monolog/monolog包.

但是,可能仍有一些空文件夹或文件无法自动删除,必须手动删除.

  • 不幸的是,它迫使你更新你的包而不是删除旧版本.例如,如果我有两个包AAA/aaa~1和版本BBB/bbb~2并且我目前处于AAA/aaa的1.0版本并且他们发布了1.1,那么当我删除BBB/bbb时我会自动更新(可能不会是我打算做的..) (6认同)
  • 我还没有 - 我只是想向其他人指出这种方法的缺陷. (2认同)

Max*_*Wen 17

以下命令将完美地执行相同操作

rm -rf vendor

composer install 
Run Code Online (Sandbox Code Playgroud)

  • 这是npm的“保存我的一天”样式;) (3认同)
  • 这似乎是最干净的选择。删除供应商目录,然后让Composer重新整理所有内容。 (2认同)
  • `composer install` 将自动删除未使用的包 (2认同)

小智 9

只需运行composer install- 它将使您的vendor目录反映composer.lock文件中的依赖项.

换句话说 - 它将删除任何缺少的供应商composer.lock.

请在运行之前更新作曲家.