如何强制作曲家重新安装库


How to force composer to reinstall a library?

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

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

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

这同样适用于Laravel框架:它也忽略了供应商文件夹。

首先执行composer clearcache

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

rm -rf vendor/*

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

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

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

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

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

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

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

<小时 />

reinstall 命令自 2.1.0 起合并并可用:

composer reinstall <package-name> # Removes and installs the package.

我做了什么:

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

它再次获取库及其 git 存储库

简答

您可以使用 &&: 在一个

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 和所有需要的依赖包如果有包在多个包中使用,作曲家将尝试安装适合所有使用包的版本。如果无法解决此问题,它将崩溃并显示相应的错误消息

链接

如何使用作曲家安装特定版本的软件包?

如何使用作曲家从拉拉维尔中删除包?

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

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

rm -rf vendor/
composer update -v

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

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

即。

composer require vendor/package

或指定版本约束

composer require vendor/package:^1.0.0

在 2022 年
您可以使用composer status列出您更改的库.
然后composer reinstall vendor/package覆盖更改。

这不会像带有 composer require composer install 的解决方案那样更改已安装库的版本。

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

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

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

从 Composer 2.1 开始你可以做

composer reinstall vendor/package

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