如何强制composer重新安装库?

Jul*_*ian 83 php zend-framework2 composer-php

我正在使用ZF2骨架应用程序,它有一个.gitignore,可以防止外部库被提交给git.在调试的过程中,我喜欢在图书馆的源代码中随处更改内容,以了解工作原理.如果这些是版本控制的,那么很容易将它们恢复到原始状态.

我如何强制Composer重新安装一个特定的框架,以便我可以再次获得一个新的 - 未修改的副本?

PS:请不要建议删除.gitignore文件,因为它出于某种原因; 它阻止我的第三方库进入我的应用程序的存储库.我总是可以在自动部署期间安装它们.

Zor*_*ran 144

只需清除您的供应商文件夹

rm -rf vendor/*
Run Code Online (Sandbox Code Playgroud)

  • 不适用于没有安装在`vendor`目录中的组件.... (21认同)
  • 我遇到过本地缓存已损坏的情况,所以即使在删除供应商目录后,我仍然会重新安装破坏的依赖项.在这种情况下,`composer clearcache`是一个很好的补充. (4认同)
  • 考虑到作曲家然后需要在OP仅需要重新安装一个软件包的情况下重新安装所有软件包,这似乎是一种非常激进的方法。“ composer require vendor / package”将在更短的时间内完成OP想要的工作。如此之多的投票结果使我感到惊讶。 (2认同)
  • Composer 不一定只安装在供应商目录中,因此即使是一种严厉的方法,它也不能在所有情况下都有效。 (2认同)

Bra*_*sen 47

您可以使用--prefer-sourcecomposer 的标志来检查具有VCS信息的外部包(如果有的话).您可以简单地恢复到原始状态.此外,如果您发出composer update命令,composer将检测您在本地所做的任何更改,并询问您是否要丢弃它们.

您的.gitignore文件与您的根项目(ZF2骨架)相关,它会阻止供应商目录(您的第三方库所在的位置)提交到您自己的VCS.ignore文件与供应商的git repo无关.

  • 最初你的-prefer-source建议没有用,直到我意识到我必须删除并重新安装所有库才能按照我的意图工作,然后`composer status -v`给了我改变的信息. (6认同)
  • 这对我不起作用,自 2021 年 5 月起我们可以使用 `composer reinstall <package-name>` (3认同)

cwe*_*ske 40

相关功能请求为https://github.com/composer/composer/issues/3112

2021 年 5 月,“重新安装”命令补丁已合并: https: //github.com/composer/composer/pull/9915 - 它在 Composer 版本 2.1.0 及所有更高版本中可用。


reinstall命令已合并并可用,因为2.1.0

composer reinstall <package-name> # Removes and installs the package.
Run Code Online (Sandbox Code Playgroud)


Yer*_*rke 23

我不想删除vendor/目录中的所有包,所以我这样做是这样的:

  1. rm -rf vendor/package-i-messed-up
  2. composer install 再次

  • 或者"作曲家需要供应商/包装 - 我搞砸了"也会很好 (4认同)

Att*_*lop 21

我做了什么:

  1. 删除了特定库的文件夹
  2. composer update --prefer-source vendor/library-name

它再次获取库以及它的git repo

  • 在这种情况下不应运行“composer update”,因为这会更改依赖项 (3认同)
  • 不,即使 `composer updatevendor/library-name` 也会**更新**该库,而不是将其重置为修改源之前安装的版本 (3认同)

小智 8

重新安装依赖项。之前在 Linux 上删除 vendor 文件夹(手动)或通过 rm 命令(如果您在项目文件夹中,确定):

rm -rf vendor/

composer update -v
Run Code Online (Sandbox Code Playgroud)

https://www.dev-metal.com/composer-problems-try-full-reset/


Ily*_*kov 5

简答

您可以使用&&在一个cli命令中执行它:

composer remove vendor/package && composer require vendor/package:version
Run Code Online (Sandbox Code Playgroud)

详细解答

通过命令删除现有包:

composer remove vendor/package
Run Code Online (Sandbox Code Playgroud)

这将从 /vendor 中删除包文件夹,从 composer.json 中删除行以及从 composer.lock 中删除包的完整记录,删除未使用的依赖项,而不删除其他包使用的依赖项

然后使用命令安装首选:

composer require vendor/package:version
Run Code Online (Sandbox Code Playgroud)

这将通过向 composer.json 添加行、向 composer.lock 和所有需要的依赖包添加记录以正确方式安装所需版本的包,如果有一个包在多个包中使用,Composer 将尝试安装适合的版本都使用包。如果它不能解决这个问题,它将崩溃并显示相应的错误消息

链接

如何使用 Composer 安装特定版本的软件包?

如何使用composer从Laravel中删除包?

使用 Composer 安装、卸载和更新模块主题等:https : //modulesunraveled.com/drupal-8-composer-and-configuration-management/installing-and-uninstalling-modules-composer

  • 请在您的答案中添加一些解释,以便其他人可以从中学习 - 这对我来说看起来不是一个好的解决方案,因为它包含其他包的依赖项发生变化的可能性 (2认同)