如何从作曲家中删除未使用的依赖项?


209

我使用composer安装了一个程序包,它还安装了许多其他程序包作为依赖项。

现在,我使用卸载了主软件包composer remove packageauthor/packagename,但是所有旧的依赖项都没有删除。我希望作曲家能够清理并仅保留根据composer.json其依赖关系而需要的软件包。

如何强制作曲家清理并删除所有未使用的软件包?

Answers:


375

正确的方法是:

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

我必须承认,这里的旗帜并不明确。

更新资料

composer remove jenssegers/mongodb

v1.0.0-beta2开始, --update-with-dependencies它是默认设置,不再需要。


感谢@Yehosef在提供解决方案的github上开始发布该问题,但是由于他没有更新答案,所以我决定为所有人提供方便自己写自己的书
Denis Pshenov

谢谢,我的讨论还没结束。
洛伦兹·迈耶

3
需要注意的一件事:如果您已经知道了composer remove …,但是在--update-with-dependencies您偶然发现此问题之前就忘记了-后续调用composer remove不会杀死所有依赖项。您需要还原,作曲install,然后composer remove --update-with-dependencies
Mike G

现在,我收到以下消息: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
取出包裹后进行清理怎么样?-就是@LorenzMeyer答案的来源:@LorenzMeyer的答案的composer update答案
Allen Linatoc

29

实际上,这很容易。

composer update

将为您完成所有这些操作,但也会更新其他软件包。

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

composer update monolog/monolog

将删除monolog/monolog包装。

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


8
不幸的是,它迫使您更新软件包,而不仅仅是删除旧版本。例如,如果我有两个软件包AAA / aaa〜1和版本BBB / bbb〜2,而我当前的版本是AAA / aaa的1.0版本,并且它们发布了1.1,那么当我删除BBB / bbb时,我会自动更新(可能不会就是我打算做的..)
Yehosef

你是对的。如果您有更好的解决方案,请返回并发布它作为答案。
洛伦兹·梅耶

3
我还没有-我只想为其他人指出这种方法的一个陷阱。
Yehosef

它确实应该是作曲家安装上的标志..之类的东西--prune
Yehosef 2015年

1
如果您喜欢这个想法,可以对其投票-github.com/composer/composer/issues/3751
Yehosef 2015年

20

以下命令将完全相同

rm -rf vendor

composer install 

2
这似乎是最干净的选择。删除供应商目录,然后让Composer重新整理所有内容。
Machavity

4
这是npm的“保存我的一天”风格;)
r34

composer install将自动删除未使用的软件包
Yidir

10

只需运行composer install-它会使您的vendor目录反映composer.lock文件中的依存关系。

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

运行此程序之前,请先更新作曲家本身。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.