【问题标题】:How to install a specific version of package using Composer?如何使用 Composer 安装特定版本的包?
【发布时间】:2017-04-16 07:06:29
【问题描述】:

我正在尝试使用 Composer 安装特定版本的软件包。我尝试了composer installcomposer require,但他们正在安装最新版本的软件包。如果我想要旧版本怎么办?

【问题讨论】:

标签: php composer-php dependency-management


【解决方案1】:

我试图要求来自不同存储库而不是最新版本的开发分支,但我遇到了同样的问题,但上述问题对我没有用:(

一段时间后,我在文档中看到,在开发分支的情况下,您需要在版本中添加“dev-”前缀,并且以下内容完美运行。

composer require [vendorName]/[packageName]:dev-[gitBranchName]

【讨论】:

    【解决方案2】:

    正如@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,您将获得补丁和次要版本,但不会获得主要(重大更改)版本。

    波浪号版本被认为是一种“更安全”的方法,但如果您使用的是可靠的依赖项(维护良好的库),那么插入符号版本应该不会有任何问题(因为微小的更改不应该是破坏性更改。

    【讨论】:

    • composer update vendor/package:version 不起作用。
    【解决方案3】:

    假设你想安装 Laravel Collective。它目前是 6.x 版,但您想要 5.8 版。您可以运行以下命令:

    composer require "laravelcollective/html":"^5.8.0"
    

    文档中显示了一个很好的示例: https://laravelcollective.com/docs/5.5/html

    【讨论】:

    • 请分享更多细节 - 版本约束^5.8.0 不会限制 Composer 使用特定版本,但仍允许安装多个版本
    【解决方案4】:

    在你的composer.json,你可以放:

    {
        "require": {
            "vendor/package": "version"
        }
    }
    

    然后从包含composer.json 的目录中运行composer installcomposer update。有时,对我来说,作曲家是 hinky,所以我会在 composer install 之前从 composer clear-cache; rm -rf vendor; rm composer.lock 开始,以确保它得到新鲜的东西。


    当然,正如其他答案指出的那样,您可以从终端运行以下命令:

    composer require vendor/package:version
    

    关于版本控制:
    - Composer's official versions article
    - Ecosia Search

    【讨论】:

      【解决方案5】:

      添加双引号以在版本号中使用插入符运算符。

      composer require middlewares/whoops "^0.4"
      

      【讨论】:

      • 我没有看到您可以将 package nameversion 作为两个单独的参数传递的时间点。
      • @x-yuri 将包名称和版本作为单独的参数传递给我使用 composer 1.5.1
      • 虽然从技术上讲这不是 OP 问题的“正确”答案,但这对大多数人来说可能更有用。
      【解决方案6】:

      composer require vendor/package:version

      例如:

      composer require refinery29/test-util:0.10.2

      【讨论】:

      【解决方案7】:

      只需使用 php composer.phar require

      例如:

      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
      • 版本作为单独的参数?曾经有过吗?
      猜你喜欢
      • 2021-07-11
      • 2014-07-08
      • 2020-05-03
      • 2023-04-01
      • 2018-12-21
      • 2019-12-15
      • 2016-09-26
      相关资源
      最近更新 更多