【问题标题】:Why did composer downgrade my packages?为什么作曲家降级我的包?
【发布时间】:2014-04-17 18:11:15
【问题描述】:

php composer.phar update 这样做了(删除了 2.3.0 包并安装了整个 2.2.5 Zend Framework):

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing zendframework/zend-filter (2.3.0)
  - Removing zendframework/zend-view (2.3.0)
  - Removing zendframework/zend-eventmanager (2.3.0)
  - Removing zendframework/zend-loader (2.3.0)
  - Removing zendframework/zend-escaper (2.3.0)
  - Removing zendframework/zend-log (2.3.0)
  - Removing zendframework/zend-servicemanager (2.3.0)
  - Removing zendframework/zend-stdlib (2.3.0)
  - Installing zendframework/zendframework (2.2.5)
    Loading from cache
Writing lock file
Generating autoload files

为什么要这么做?我的 composer.json 看起来像这样,并没有暗示任何指导上述事件过程的内容:

"repositories":[
    {
        "type":"composer",
        "url":"https://packagist.org/"
    },
    {
         "type":"composer",
         "url":"http://packages.zendframework.com/"
    }
],
"require": {
    "zendframework/zend-log" : "2.*",
    "zendframework/zend-escaper" : "2.*",
    "zendframework/zend-filter" : "2.*",
    "zendframework/zend-view" : "2.*"
}

我的期望是:删除 2.3.0,安装 2.3.1 包

【问题讨论】:

  • 在运行 update 之前,您的依赖项中是否有任何更改(添加/删除)?
  • 不管怎样;故事的寓意是尽可能具体与您的版本号。所以使用~2.3(即>=2.3<3.0)或2.3.*。 Composer 会通过一系列逻辑来找出哪一组版本满足您的所有依赖项。如果您更具体,那么您只需要更新您的composer.json,如果您决定要一个新版本。它消除了update 的一些“机会”。
  • 那是你完整的composer.json 吗?您是否需要将 zend 设置为低于您定义的其他东西?
  • 它几乎是整个 composer.json(减去名称、描述和许可证)。我认为 JSON 中没有任何内容被移动/更改
  • @Sam 耶!将其更改为~2.3 有效!随意使用您的评论作为答案

标签: php composer-php


【解决方案1】:

我的回答并没有完全描述 为什么它被降级,因为 Composer 中的算法非常密集(这就是为什么 updateinstalling 使用 .lock 花费的时间更长的原因)。它们会遍历您的所有依赖项、所有潜在版本以及每个依赖项的版本的依赖项是什么。在获得所有这些信息后,它会尝试提出“完美”匹配。

有时,您的依赖项或依赖项的依赖项中最轻微的变化可能会产生巨大的变化。此外,您有时会发现无法解决您的依赖项,因为一个依赖项可能需要symfony/http-foundation ~2.5,而一个可能需要symfony/http-foundation 2.1.*(这不是您的情况,但很高兴知道)。

总而言之,这个故事的寓意是您应该尽可能具体地使用您的composer.json(尤其是在生产中)。这样,您始终可以控制您使用的版本,而不是让 Composer 决定。更糟糕的情况是,您运行 composer update 并且它无法解决您的依赖关系。然后在Packagist 上做一些研究,看看哪些版本会愉快地一起解决。

我建议使用~2.3(与>= 2.3< 3 相同)或2.3.* 版本。然后 Composer 甚至不会尝试版本 2.2.5。查看Composer's documentation,了解如何表达不同的包版本。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2013-08-21
    • 2016-09-12
    • 2018-01-18
    相关资源
    最近更新 更多