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

Laravel 使用composer删除包(不更新其他包),laravel,composer-php,laravel-5.4,Laravel,Composer Php,Laravel 5.4,我目前安装了一个软件包“watson/sitemap”。现在,我想在不使用“composer update”的情况下删除它,因为它将更新我不想要的其他包 任何帮助都将不胜感激。我不确定这是否可行。重申你的问题。在composer.json中有watson/sitemap,您已经执行了composer更新,以下载包及其依赖项。现在您想删除包,但保留依赖包吗 我不确定是否有好的方法可以做到这一点,您必须在某个时候运行composer update,这将再次下载它。如果我的解释是正确的,那么您的解决方

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


任何帮助都将不胜感激。

我不确定这是否可行。重申你的问题。在composer.json中有
watson/sitemap
,您已经执行了
composer更新
,以下载包及其依赖项。现在您想删除包,但保留依赖包吗

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

正确的方式: 发件人:

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

php composer.phar remove vendor/package vendor/package2
删除需求后,将删除修改后的需求 卸载

黑客方式: 从composer.json中删除条目,然后运行

composer update watson/sitemap

这将完全从composer.lock和/vendor中删除一个包。更新:
composer 2现在已退出,并且它似乎足够聪明,可以处理递归。您只需删除有问题的包

我最近需要这样做。下面是一个真实的例子。这是相当令人讨厌的。您可以使用Composer的PHP类或解析
Composer.lock
文件来编写脚本,但这是一个手动过程,您可以遵循

1.移除不需要的包 2.查找孤立的依赖项 输出(如下所示):

3.删除孤立依赖项 4.冲洗,重复 重复步骤2和3,直到找到所有孤立项



澄清:如果您使用
--no update
标志,则不会升级软件包。。。然而(在撰写本文时,2020年初),它也没有删除孤立的依赖项。你没有告诉它不要“升级”。您告诉它不要更新任何已安装的(
composer.lock
)依赖项。差别很大。这就是为什么您必须找到它们并从项目中手动“更新”它们。

我没有使用composer update下载包。我只遵循此链接中的说明。那么你是说我应该使用“composer update”来删除包?“composer update”的复杂之处在于它将更新我不希望发生的其他包。
composer require
使其由composer管理。如果随后手动删除该包(从composer外部的磁盘中删除),则如果需要将其作为项目中的依赖项或作为
composer.json
文件中某些内容的依赖项,则
composer更新将其重新添加。正如其他人提到的。。。如果你不再需要它,你可以做一个
composer-remove
。我通常只是手动将其从我的
composer.json
文件中删除,下一次
composer update
将删除由于它而安装的所有内容。如果您不想使用
composer update
,因为它会更新其他软件包,您可能想考虑在<代码>作曲家.JSON<代码>文件中有更严格的版本要求。这样您就知道composer不会升级。在我看来,这并不是最好的主意,我通常坚持使用一个允许所有包进行不间断更改更新的版本(有些是X.Y.*的,有些是X.*的,取决于项目的版本方案)。你说的“包还在那里”是什么意思?@sack用黑客的方法试试看,正确的方法行不通,因为--no update选项只编辑composer.json,而不删除包的文件。(我想这就是@JonathanSolorzano的意思。)是的,我看到composer.json中的行被删除了,但供应商目录在那里。最好的方法是将它们结合起来:
composer删除我的/package——不更新
,然后运行
composer更新我的/package
,这会将其从json和锁文件中删除,而不更新任何其他包。先生,你帮我解决了很多问题。多谢了,汉克斯,这对我帮助很大。但请记住,这并不适用于所有情况。如果孤立依赖项具有替换项,则
composer why package/x
不会显示“没有安装包”,而是显示“package/x v.1.2.3替换包/y(*)”。表示该命令不适用于这些包。
composer update watson/sitemap
composer remove --no-update illuminate/mail
composer update illuminate/mail
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"
composer update erusev/parsedown swiftmailer/swiftmailer tijsverkoyen/css-to-inline-styles