我的 composer.json 文件中有这一行:
"require": {
...
"friendsofsymfony/user-bundle": "~2.0@dev",
...
},
~2.0@dev
中的波浪号 ~
究竟是什么意思?那是一个占位符并且应该总是获取像 1.2.0
、2.2.0
、3.2.0
等的颠覆吗?没有意义(将由 *
通配符完成)。
composer.json documentation 没有说明有关波浪号的任何信息。
我之所以问,是因为我刚刚读到 security issue in the Symfony blog,他们建议升级到 1.3.3 版。但是弄清楚 FOSUserBundle 的版本并不容易(我找不到包含该版本的文件)。
波浪号表示下一个重要版本。在您的情况下,它相当于 >= 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 文档的简单总结说明。
Tilde
运算符对于使用 semantic versioning
方案对其库进行版本控制的项目很有用。
Semantic versioning
更像是评估 next significant release
的指南。
对于 Composer,此运算符意味着在安装和更新时允许次要版本(可以包含补丁)而不允许主要版本(可能不向后兼容)。
例如:~4.1
将允许项目版本 >=4.1
但 <5.0
。
波浪号 ~
是 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
包含的版本集。右侧包含的部分版本使用通配符完成。例如 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
您可以使用 * 通配符指定模式。 1.0.* 相当于 >=1.0 <1.1
Simple Version Range (>, >=, <, <=, !=)
通过使用比较运算符,您可以指定有效版本的范围。有效的运算符是 >、>=、<、<=、!=。您可以定义多个范围。由空格 ( ) 或逗号 (,) 分隔的范围将被视为逻辑 AND。双管道 (||) 将被视为逻辑 OR。 AND 的优先级高于 OR。
您可以指定包的确切版本示例:1.0.2
~2.0@dev
中的波浪号 ~
完全意味着升级为即时版本:
例如 :
如果我们有 ~2.0@dev
,它会立即升级到下一个版本 => ~2.x@dev
~2.2
表示 2.2 和任何 2.x,其中 x 为 2 或更高。上的~2.1.3
也是任何 2.1.x,其中 x 为 3 或更高。~2.0
与2.*
有何不同?只有最后一个数字不是0才有用吗?