我正在使用 ZF2 骨架应用程序,它有一个 .gitignore,可以防止外部库提交到 git。在调试时,我喜欢在库的源代码中到处改变一些东西,以了解事情是如何工作的。如果这些是版本控制的,那么将很容易将它们恢复到原始状态。
如何强制 Composer 重新安装特定框架,以便我可以再次获得全新的 - 未修改的 - 副本?
PS:请不要建议删除 .gitignore 文件,因为它的存在是有原因的;它可以防止我的第三方库进入我的应用程序的存储库。我始终可以在自动部署期间安装它们。
这同样适用于 Laravel 框架:它也忽略了供应商文件夹。
首先执行
composer clearcache
然后清除您的供应商文件夹
rm -rf vendor/*
或者更好的是,删除会产生问题的特定模块,以避免再次下载。
您可以使用 Composer 的
--prefer-source
标志来签出带有 VCS 信息(如果有)的外部包。您可以简单地恢复到原始状态。此外,如果您发出 composer update
命令,composer 将检测您在本地所做的任何更改,并询问您是否要放弃它们。
您的 .gitignore 文件与您的根项目(ZF2 框架)相关,它会阻止供应商目录(您的第三方库所在的位置)提交到您自己的 VCS。忽略文件与您供应商的 git 存储库无关。
我不想删除
vendor/
目录中的所有包,所以我是这样做的:
rm -rf vendor/package-i-messed-up
composer install
相关功能请求为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.
我做了什么:
composer update --prefer-source vendor/library-name
它再次获取库以及 git repo
重新安装依赖项。之前在 Linux 上删除供应商文件夹(手动)或通过 rm 命令(如果您位于项目文件夹中,当然):
rm -rf vendor/
composer update -v
您可以使用 && 在一个 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 安装、卸载和更新模块主题等:https://modulesunraveled.com/drupal-8-composer-and-configuration-management/installing-and-uninstalling-modules-composer
正如用户 @aaracrr 在另一个答案的评论中指出的那样,最好的答案可能是重新要求具有相同版本约束的包。
即。
composer require vendor/package
或指定版本约束
composer require vendor/package:^1.0.0
composer status
列出您更改的库。composer reinstall vendor/package
覆盖更改。
这不会像使用
或composer require
composer install
自Composer 2.1你可以做
composer reinstall vendor/package
出于某种原因,没有人提出强制重新安装的明显且最直接的方法:
> composer remove vendor-name/package-name && composer require vendor-name/package-name
请注意,这个确切的命令将安装最新版本的软件包。如果您使用旧版本的软件包并且软件包不具有向后兼容性,这将阻碍版本兼容性。您可以考虑先备份您的
composer.json
。