ChatGPT解决这个技术问题 Extra ChatGPT

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

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

现在我用 composer remove packageauthor/packagename 卸载了主包,但没有删除所有旧的依赖项。我希望作曲家清理并仅保留根据 composer.json 及其依赖项所需的包。

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


u
user151841

正确的做法是:

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

我必须承认这里的标志对于它将做什么并不十分明显。

更新

composer remove jenssegers/mongodb

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


感谢@Yehosef 在提供解决方案的 github 上启动该问题,但由于他没有更新他的答案,我决定自己编写以方便大家
谢谢,我没有结束他们的讨论。
需要注意的一件事:如果您已经使用 composer remove …,但在偶然发现此问题之前忘记了 --update-with-dependencies — 随后对 composer remove 的调用不会杀死所有依赖项。您需要还原,作曲家 install,然后是 composer remove --update-with-dependencies
现在我收到以下消息: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
删除包后如何清理? -- 这就是@LorenzMeyer 的答案所在:composer update 对@LorenzMeyer 的这个答案表示赞许
L
Lorenz Meyer

事实上,这很容易。

composer update

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

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

composer update monolog/monolog

将删除 monolog/monolog 包。

然而,可能仍然存在一些无法自动删除的空文件夹或文件,必须手动删除。


不幸的是,它迫使你更新你的包,而不是仅仅删除旧版本。例如,如果我有两个包 AAA/aaa ~1 和版本 BBB/bbb ~2,我目前处于 AAA/aaa 的 1.0 版并且他们发布了 1.1,那么当我删除 BBB/bbb 时,我会自动更新(可能不会成为我打算做的事情..)
你说的对。如果您有更好的解决方案,请返回并将其作为答案发布。
我还没有——我只是想向其他人指出这种方法的一个缺陷。
它真的应该是作曲家安装上的一个标志.. 像 --prune
如果您喜欢这个想法,您可以投票 - github.com/composer/composer/issues/3751
J
Jonas Staudenmeir

以下命令将完美地做同样的事情

rm -rf vendor

composer install 

这似乎是最干净的选择。删除 vendor 目录,让 Composer 重新提取所有内容。
这是 npm “拯救我的一天”风格;)
composer install 将自动删除未使用的包
V
Valentas

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

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

请在运行之前更新作曲家本身。