我的 composer.json 文件中的波浪号 (~) 是啥意思?
Posted
技术标签:
【中文标题】我的 composer.json 文件中的波浪号 (~) 是啥意思?【英文标题】: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.0
、2.2.0
、3.2.0
等的颠覆吗?没有意义(将由*
通配符完成)。
composer.json documentation 没有告诉任何关于波浪号的信息。
我之所以问,是因为我刚刚读到了 security issue in the Symfony blog,他们建议升级到 1.3.3 版。但是弄清楚 FOSUserBundle 的版本并不容易(我找不到包含该版本的文件)。
【问题讨论】:
【参考方案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.0
与 2.*
有何不同?是不是只有最后一位不是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
【讨论】:
以上是关于我的 composer.json 文件中的波浪号 (~) 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章