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



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

任何帮助都将不胜感激。

UPDATE:Composer 2现在已经发布,它似乎足够聪明,可以处理递归。您只需要删除有问题的程序包。

我最近需要这样做。下面是一个真实世界的例子。这真是太离谱了。您可以使用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,直到找到所有孤儿。


澄清:如果使用--no-update标志,则不会升级软件包。。。然而(截至2020年初),它也没有删除孤立的依赖关系。你并没有告诉它不要"升级";。您告诉它不要更新任何已安装的(composer.lock)依赖项。差别很大。这就是为什么你必须找到它们并手动";"更新";他们退出了你的项目。

正确的方式:

composer remove watson/sitemap --no-update

来自CLI文档:

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

php composer.phar remove vendor/package vendor/package2

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

破解方式:

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

composer update watson/sitemap

这将从composer.lock/vendor中完全删除一个包

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

我不确定有什么好方法可以做到这一点,您必须在某个时候运行composer update,它只会再次下载它。如果我的解释是正确的,也许你的解决方案是只添加你需要的其他包,而当你去掉watson/sitemap时,你不想删除这些包,可能是草率的/将它的依赖项粘贴到你的composer.json文件中?

我使用

composer删除包名--不更新依赖项

适用于

相关内容

  • 没有找到相关文章

最新更新