ChatGPT解决这个技术问题 Extra ChatGPT

我的 composer.json 文件中的波浪号 (~) 是什么意思?

我的 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 的版本并不容易(我找不到包含该版本的文件)。


k
kenorb

波浪号表示下一个重要版本。在您的情况下,它相当于 >= 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 等
P
Pranav Rana

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


D
Dylan Kas

波浪号 ~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。 AND 的优先级高于 OR。

最后是Exact Version Constraint

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


S
Selim Reza

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

例如 :

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