【问题标题】:What does the tilde (~) mean in my composer.json file?我的 composer.json 文件中的波浪号 (~) 是什么意思?
【发布时间】:2013-09-29 13:23:46
【问题描述】:

我的 composer.json 文件中有这一行:

"require": {
    ...
    "friendsofsymfony/user-bundle": "~2.0@dev",
    ...
},

~2.0@dev 中的波浪号 ~ 究竟是什么意思?那是一个占位符并且应该总是获取像1.2.02.2.03.2.0 等的颠覆吗?没有意义(将由* 通配符完成)。

composer.json documentation 没有告诉任何关于波浪号的信息。

我之所以问,是因为我刚刚读到了 security issue in the Symfony blog,他们建议升级到 1.3.3 版。但是弄清楚 FOSUserBundle 的版本并不容易(我找不到包含该版本的文件)。

【问题讨论】:

    标签: symfony syntax composer-php


    【解决方案1】:

    波浪号表示下一个重要版本。在你的情况下,它相当于>= 2.0, < 3.0

    完整解释在Tilde Version Range docs page

    ~ 运算符最好通过示例来解释:~1.2 等效于 >=1.2 <2.0.0,而 ~1.2.3 等效于 >=1.2.3 <1.3.0

    另一种看待它的方式是使用~ 指定最小值 版本,但允许指定的最后一位数字上升。

    Seldeak 的以下评论是对 Composer 文档的简单总结说明。

    【讨论】:

    • 我喜欢的一个简单的经验法则是 ~ 允许最后一个数字上升。例如~2.2 表示 2.2 和任何 2.x,其中 x 为 2 或更高。 ~2.1.3 也是任何 2.1.x,其中 x 为 3 或更高。
    • ~2.02.* 有何不同?是不是只有最后一位不是0才有用?
    • ~2.0 和 2.* 相同,但 ~2.3 和 2.* 不同,因为 ~2.3 不允许低于 2.3 的版本,而 2.* 允许 2.0、2.1、2.2 等
    【解决方案2】:

    Tilde 运算符对于使用semantic versioning 方案对其库进行版本控制的项目很有用。

    Semantic versioning 更像是一个评估为next significant release 的指南。

    对于 Composer,此运算符表示在安装更新时允许次要版本(可能包括补丁)而不允许主要版本(可能不向后兼容) .

    例如:~4.1 将允许项目版本 >=4.1<5.0

    致谢:http://dwellupper.io/post/37/using-tilde-range-operator-to-resolve-dependency-version-in-composer-php

    【讨论】:

      【解决方案3】:

      ~2.0@dev 中的波浪号 ~ 完全意味着升级为即时版本:

      例如:

      如果我们有~2.0@dev,它会立即进入下一个版本=> ~2.x@dev

      【讨论】:

        【解决方案4】:

        标题~many constraints that can be used to handle versions 之一。

        Next Significant Release Operators (~, ^):

        ~ 运算符最好通过示例来解释:~1.2 等效于 >=1.2 <2.0.0,而 ~1.2.3 等效于 >=1.2.3 <1.3.0

        ^ 运算符的行为非常相似,但它更接近于 语义版本控制,并且总是允许不间断的更新。为了 例如^1.2.3 等同于>=1.2.3 <2.0.0,因为没有任何版本 直到 2.0 应该会破坏向后兼容性。对于 1.0 之前的版本 它还考虑到安全性并将^0.3视为>=0.3.0 <0.4.0

        Hyphenated Version Range (-)

        包含的版本集。右侧的部分版本包括 用通配符完成。例如1.0 - 2.0 等价于 >=1.0.0 <2.1 因为 2.0 变为 2.0.*。另一方面,1.0.0 - 2.1.0 等价于 >=1.0.0 <=2.1.0

        Wildcard Version Range (.*)

        您可以使用 * 通配符指定模式。 1.0.* 是等价的 的>=1.0 <1.1

        Simple Version Range (>, >=, <, <=, !=)

        通过使用比较运算符,您可以指定有效范围 版本。有效的运算符是 >、>=、

        您可以定义多个范围。用空格分隔的范围 ( ) 或 逗号 (,) 将被视为逻辑与。双管 (||) 将是 视为逻辑或。 AND 的优先级高于 OR。

        最后是Exact Version Constraint

        您可以指定包的确切版本 示例:1.0.2

        【讨论】:

          最近更新 更多