125

我正在使用 ZF2 框架应用程序,它有一个 .gitignore 可以防止将外部库提交给 git。在调试时,我喜欢在库的源代码中到处更改东西,以了解事情是如何工作的。如果这些是版本控制的,那么将它们恢复到原始状态将非常容易。

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

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

4

10 回答 10

205

首先执行composer clearcache

然后清除您的供应商文件夹

rm -rf vendor/*

或者更好的是,只需删除产生问题的特定模块,以避免重新下载。

于 2015-08-11T04:08:25.407 回答
55

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

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

于 2013-10-26T20:24:36.810 回答
51

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

  1. rm -rf vendor/package-i-messed-up
  2. composer install再次
于 2017-12-16T00:23:32.020 回答
27

我做了什么:

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

它与它的 git repo 一起再次获取库

于 2016-12-13T17:41:28.343 回答
9

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

rm -rf vendor/

composer update -v

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

于 2019-06-04T01:16:49.633 回答
6

简短的回答

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

composer remove vendor/package && composer require vendor/package:version

详细解答

通过命令删除现有包:

composer remove vendor/package

这将从/vendor 中删除包的文件夹,从composer.json 中删除行,并从composer.lock 中删除包的整个记录​​,同时删除未使用的依赖项并且不删除其他包使用的依赖项

然后使用命令安装首选的一个:

composer require vendor/package:version

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

链接

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

如何使用作曲家从 Laravel 中删除一个包?

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

于 2021-02-28T09:30:13.990 回答
4

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

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


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

composer reinstall <package-name> # Removes and installs the package.
于 2021-06-08T06:54:00.360 回答
3

正如用户@aaracrr 在对另一个答案的评论中指出的那样,最好的答案可能是重新要求具有相同版本约束的包。

IE。

composer require vendor/package

或指定版本约束

composer require vendor/package:^1.0.0
于 2019-05-17T11:36:22.587 回答
3

出于某种原因,没有人建议强制重新安装的明显和最直接的方法:

> composer remove vendor-name/package-name && composer vendor-name/package-name

请注意,这个确切的命令将安装最新版本的软件包。如果您使用的是旧版本的包并且包没有向后兼容性,这将破坏版本兼容性。您可以考虑先备份composer.json

于 2020-06-29T09:46:56.850 回答
1

Composer 2.1开始,你可以做

composer reinstall vendor/package

https://getcomposer.org/doc/03-cli.md#reinstall

于 2021-11-24T15:44:54.917 回答