【问题标题】:Does Composer prioritise private packages' requirements?Composer 是否优先考虑私有包的要求?
【发布时间】:2014-07-02 15:22:27
【问题描述】:

我有一个项目,其中 composer 用于安装 Nette Framework 和一个托管在私有 composer 存储库中的私有包。

项目的composer.json:

...
"require": {
    "php": ">= 5.3.7",
    "nette/nette": "2.1.*",
    "myrepo/private-package": "*"
},
"minimum-stability": "dev",
"repositories": [
    {
        "type": "composer",
        "url": "http://myrepo.org"
    }
]
...

私有包的composer.json:

...
"require": {
         "php": ">= 5.3.7",
         "nette/nette": "2.2.*"
},
...

如您所见,该项目需要 Nette 2.1.*。但是,私有包需要版本为 2.2.* 的 Nette。

如果我运行composer install,Composer 会安装2.2.* 版本的 Nette。这不符合项目的 composer.json(需要2.1.*)。

我了解这两项要求都无法满足。但是为什么作曲家没有打印出错误呢?私有存储库是否具有某种优先级?

【问题讨论】:

  • 您确定要安装“dev-master”的最新提交吗?该分支曾经是 2.1.x 版本,如果您本地的 composer.lock 引用了 2.2 之前的开发时间的提交,那么版本要求将毫无怨言地得到满足。但这又是另一个例子,说明为什么在 Composer 中使用分支不是最好的主意。
  • 确实是最近的提交。我总是删除 composer.lock、整个供应商文件夹和作曲家的缓存,但这仍然会发生。
  • 顺便说一句,如果我将第二个要求更改为 2.2.*,它仍然被使用而不是项目的 2.1.*。我会相应地编辑问题,这是比dev-master 更好的例子。

标签: php composer-php


【解决方案1】:

这是一个bug,现在已修复。

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 2017-01-08
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多