【问题标题】:Composer always install the latest version, if the package version separated by logical ORComposer 总是安装最新版本,如果包版本用逻辑 OR 分隔
【发布时间】:2020-05-23 14:19:05
【问题描述】:

Composer 不会安装由逻辑 OR 分隔的版本的软件包。

第一张图片。正如所料,我得到了所有5.x 版本。

    "require": {
        "illuminate/http": "^5"
    },

第二张图片:

    "require": {
        "illuminate/http": "^5||^6"
    },

我希望获得所有5.x 版本和所有6.x 版本,但总是获得一个最新版本。

如何解决这个问题?

【问题讨论】:

  • 你在调用哪个命令?还有其他要求吗?

标签: php laravel composer-php


【解决方案1】:

您不能安装同一软件包的多个版本。 Composer 只是不支持这一点,鉴于它主要面向 php,因此不太可能会改变。您可以尝试通过 bower 安装,但我认为它也不支持同时支持两个版本..

更多详情https://getcomposer.org/doc/03-cli.md#require

【讨论】:

  • 我不想安装多个版本,我只想让我的库支持列表中的任何版本。 5.x 或 6.x,与其他项目依赖项兼容。
  • 我的库支持 5.x 和 6.x 版本的依赖。如果项目包含的库仅支持它支持我的库的依赖项的 5.x,我想这样做。如果项目包含仅支持 6.x 依赖项的库,它也支持我的库。我想作曲家根据与其他依赖项的兼容性来决定要安装哪个版本的依赖项。但现在它总是尝试安装最新版本。
  • 你可以试试这个命令来验证你的 composer.json php composer.phar validate
【解决方案2】:

好的,我明白了。 这是composer.lock 的错。通常,如果您正在创建库,则不应将 composer.lock 提交给 vcs

因为你的库的依赖版本将被锁定在一个特定的版本。

但通常库必须与尽可能多的依赖版本兼容。

此外,如果您已经安装了一个兼容版本的依赖项,则无法安装一个(即使您删除了composer.lock)。

composer.lock 强制点版本为特定值,无法安装兼容其他依赖项之一:

您已经安装了某个版本,无法安装另一个。即使您的composer.json 允许安装兼容版本之一。

所以,我只是删除了/vendorcomposer.lock,然后作曲家自己选择一个兼容的版本。

【讨论】:

  • 请分享更多细节。你说的是哪个图书馆?如果缺少composer.json,应该如何安装该库?这就是所有库的工作方式,我已经在多个项目上安装了 Symfony,没有任何问题
  • 尼科,哦,我当然是说composer.lock。感谢您的 ping。
  • 是什么让您认为在安装库时会考虑提交到库存储库的composer.lock
  • 好的,例如。 Laravel 框架用它自己的实现替换了一些名为illuminate/xxx 的包。我创建了安装各种 laravel 版本而不是 illuminate 包的 CI 配置,以检查我的库与这些 laravel 版本的兼容性。如果库有 composer.lock 文件,则无法安装 laravel。因为 laravel 将 illuminate 包替换为它自己的版本,但 illuminate 包版本强制设置为与 laravel 不同的版本。
  • travis-ci.com/github/CaliforniaMountainSnake/json-response/…。只有最新版本的 laravel 通过了检查,因为它的版本等于在 composer.lock 中强制设置的最新版本的依赖项
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 2019-01-16
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多