127

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

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

波浪号~中的 ~2.0@dev确切含义是什么?那是一个占位符并且应该总是获取像1.2.0,2.2.0等等3.2.0这样的颠覆吗?没有意义(并且将由*通配符完成)。

composer.json 文档没有说明任何有关波浪号的信息。

我之所以问,是因为我刚刚在 Symfony 博客中读到了一个安全问题,他们建议升级到 1.3.3 版。但是弄清楚 FOSUserBundle 的版本并不容易(我找不到包含该版本的文件)。

4

4 回答 4

157

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

完整的解释在波浪号版本范围文档页面

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

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

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

于 2013-09-24T11:29:24.257 回答
4

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

于 2017-11-12T13:01:52.933 回答
1

波浪号~可用于处理版本的众多约束之一。

下一个重要版本运算符 (~, ^) :

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

^运算符的行为非常相似,但它更接近语义版本控制,并且始终允许不间断更新。例如^1.2.3,相当于>=1.2.3 <2.0.02.0 之前的任何版本都不会破坏向后兼容性。对于 1.0 之前的版本,它还考虑到安全性并将^0.3其视为>=0.3.0 <0.4.0

连字符版本范围 (-)

包含的版本集。右侧包含的部分版本使用通配符完成。例如1.0 - 2.0相当于 >=1.0.0 <2.1as the 2.0become 2.0.*。另一方面1.0.0 - 2.1.0相当于>=1.0.0 <=2.1.0

通配符版本范围 (.*)

您可以使用 * 通配符指定模式。1.0.*相当于>=1.0 <1.1

简单版本范围(>、>=、<、<=、!=)

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

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

最后是精确版本约束

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

于 2021-07-09T08:23:37.117 回答
0

波浪号~~2.0@dev确切含义是立即版本:

例如 :

如果我们有~2.0@dev它会立即升级到下一个版本 => ~2.x@dev

于 2019-08-21T04:32:21.403 回答