我目前已经安装了一个软件包"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删除包名--不更新依赖项
适用于