我正在尝试使用 Composer 安装特定版本的软件包。我尝试了 composer install
和 composer require
,但他们正在安装最新版本的软件包。如果我想要旧版本怎么办?
composer require vendor/package:version
例如:
composer require refinery29/test-util:0.10.2
添加双引号以在版本号中使用插入符运算符。
composer require middlewares/whoops "^0.4"
正如@alucic 提到的,使用:
composer require vendor/package:version
或者您可以使用:
composer update vendor/package:version
您可能应该查看 this StackOverflow post about differences between composer install and composer update。
有关版本号的问题,您可以查看 Composer documentation on versions,但简而言之:
波浪号版本范围 (~) - ~1.2.3 相当于 >=1.2.3 <1.3.0
插入符号版本范围 (^) - ^1.2.3 相当于 >=1.2.3 <2.0.0
因此,使用 Tilde 您将获得补丁的自动更新,但不会更新次要和主要版本。但是,如果您使用 Caret,您将获得补丁和次要版本,但您不会获得主要(重大更改)版本。
波浪号版本被认为是一种“更安全”的方法,但如果您使用可靠的依赖项(维护良好的库),您应该不会对 Caret 版本有任何问题(因为微小的更改不应该是破坏性更改。
composer update vendor/package:version
不起作用。
只需使用 php composer.phar 要求
例如 :
php composer.phar require doctrine/mongodb-odm-bundle 3.0
也可以安装。
https://getcomposer.org/doc/03-cli.md#require https://getcomposer.org/doc/03-cli.md#install
install
- 仅适用于 require
。如果您希望切换到特定版本并签入 composer.lock
文件,则可以,但您必须使用 composer require
,然后再将更改恢复为 composer.json
。
假设你想安装 Laravel Collective。它目前是 6.x 版,但您想要 5.8 版。您可以运行以下命令:
composer require "laravelcollective/html":"^5.8.0"
文档中显示了一个很好的示例:https://laravelcollective.com/docs/5.5/html
^5.8.0
不会限制 Composer 使用特定版本,但仍允许安装多个版本
我试图要求来自不同存储库而不是最新版本的开发分支,并且我遇到了同样的问题,并且上述问题都不适合我:(
过了一会儿,我在文档中看到,在开发分支的情况下,您需要在版本中添加“dev-”前缀,并且以下内容完美运行。
composer require [vendorName]/[packageName]:dev-[gitBranchName]
在您的 composer.json
中,您可以输入:
{
"require": {
"vendor/package": "version"
}
}
然后从包含 composer.json
的目录运行 composer install
或 composer update
。有时,对我来说,作曲家很奇怪,所以我会在 composer install
之前从 composer clear-cache; rm -rf vendor; rm composer.lock
开始,以确保它得到新鲜的东西。
当然,正如其他答案指出的那样,您可以从终端运行以下命令:
composer require vendor/package:version
关于版本控制:
- Composer's official versions article
- Ecosia Search