如何强制composer重新安装库?

时间:2013-10-26 20:07:49

标签: php zend-framework2 composer-php

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

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

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

9 个答案:

答案 0 :(得分:136)

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

即可
rm -rf vendor/*

答案 1 :(得分:41)

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

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

答案 2 :(得分:17)

我做了什么:

  1. 删除了特定图书馆的文件夹
  2. composer update --prefer-source vendor/library-name
  3. 它再次获取库以及它的git repo

答案 3 :(得分:13)

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

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

答案 4 :(得分:4)

简答

您可以在一个 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 将尝试安装适合所有使用包的版本。如果它不能解决这个问题,它将崩溃并显示相应的错误消息

链接

How to install a specific version of package using Composer?

How to remove a package from Laravel using composer?

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

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

rm -rf vendor/

composer update -v

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

答案 8 :(得分:0)

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

即。

composer require vendor/package

或指定版本约束

composer require vendor/package:^1.0.0