首页 > 解决方案 > 为什么作曲家不按 Caret 版本范围提取更新的包?

问题描述

我的 composer.json

{
    "name": "foo/boo",
    "description": "bar",
    "type": "project",
    "require": {
        "php": ">=7.2.0",
        "yiisoft/yii2": "~2.0.15",
        "bar/foo": "^0.1.0"
    },
    "config": {
        "process-timeout": 1800,
        "fxp-asset": {
            "enabled": false
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        },
        {
            "type": "git",
            "url": "ssh://deployer@gerrit.foo.pl:29418/bar"
        }
    ]
}

Caret Version Range的 Composer 文档说我的bar/foo包版本请求应该是这样的:> = 0.1.0 和 < 1.0.0。

但是在composer update我得到版本 0.1.0 之后。我的 bar/foo 包有标签:

$ cd /vendor/my-bar-foo-package
$ git tag --list
v0.1.0
v0.2.0
v0.2.1
v0.2.2

在向 `"bar/foo": "0.2.2" composer update pull v0.2.2 发送版本请求后,为什么 "^0.1.0" 没有?

标签: composer-php

解决方案


Caret Version Range 的 Composer 文档说我的 bar/foo 包的版本请求应该是这样的:> = 0.1.0 和 < 1.0.0。

不,这不对:

对于 1.0 之前的版本,它还考虑到安全性并将^0.3其视为>=0.3.0 <0.4.0

https://getcomposer.org/doc/articles/versions.md#caret-version-range-

所以它按预期工作 -^0.1.0相当于>=0.1.0 <0.2.0并且0.2.2release 不匹配这个约束。


推荐阅读