使用composer删除包(不更新其他包)

时间:2017-10-13 03:32:13

标签: laravel composer-php laravel-5.4

我目前已经安装了一个包“watson / sitemap”。现在,我想删除它而不使用“composer update”,因为它会更新我不想要的其他包。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

正确的方式:

composer remove watson/sitemap --no-update

来自CLI Docs

  

remove命令从composer.json文件中删除包   当前目录。

php composer.phar remove vendor/package vendor/package2
     

删除要求后,修改后的要求将是   卸载。

哈克方式:

composer.json 中删除条目,然后运行

composer update watson/sitemap

这将完全从 composer.lock / vendor

中删除一个包

答案 1 :(得分:2)

我最近需要这样做。这是一个真实的例子。这很hacky。您可以使用Composer的PHP类或通过解析composer.lock文件来编写脚本,但这是您可以遵循的手动过程。

1。删除不需要的软件包

composer remove --no-update illuminate/mail
composer update illuminate/mail

2。寻找孤立的依赖项

composer show -N | xargs -n 1 composer why | grep "There is no installed package"

输出(类似这样):

There is no installed package depending on "erusev/parsedown"
There is no installed package depending on "swiftmailer/swiftmailer"
There is no installed package depending on "tijsverkoyen/css-to-inline-styles"

3。删除孤立的依赖项

composer update erusev/parsedown swiftmailer/swiftmailer tijsverkoyen/css-to-inline-styles

4。冲洗,重复

重复步骤2和3,直到找到所有孤儿为止。

答案 2 :(得分:0)

我不确定这是可能的。重述你的问题。你的composer.json中有watson/sitemap,你已经执行composer update来下载软件包及其依赖项。现在您要删除包但保留依赖包?

我不确定这是一个很好的方法,你必须在某个时候运行composer update,然后再次下载它。如果我的解释是正确的,也许你的解决方案是只需添加你需要的其他软件包,当你摆脱watson/sitemap时,你不想要删除它们,可能是草率/粘贴它的依赖关系到你的composer.json文件?