composer.json 中带有插入符号和波形符的版本号

问题描述 投票:0回答:2

我想知道composer.json 中的插入符和波浪号有什么区别。我可以这样说吗:脱字号 (^) 锁定第一个和第二个版本号(1.2.3 中的 1.2),波浪号 (~) 仅锁定第一个版本号(1.2.3 中的 1)?

https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators

version composer-php
2个回答
68
投票

从您链接的文档中:

~1.2 相当于 >=1.2 <2.0.0, while ~1.2.3 is equivalent to >=1.2.3 <1.3.0

^1.2.3 相当于 >=1.2.3 <2.0.0

波浪号取决于版本号中给出的位数。给出的最后一位数字可能会有所不同。

插入符号几乎总是更好的选择,因为它的行为足够相似,可以直接替换(

~1.2
^1.2
^1.2.0
相同),但在处理非零补丁版本时提供更好的灵活性(
^1.2.3 
~1.2.3
不同,因为波形符版本仅允许更新低于 1.3.0,插入符允许更新低于 2.0.0)。

使用波浪号作为版本要求的唯一原因是您必须处理获得兼容更新的“零”版本。

~0.1
~1.1
之间的波形符没有区别,在这两种情况下,它都允许更新到下一个主要版本号(分别低于 1.0 或 2.0)。插入符号运算符将不允许在此范围内进行较小的更新:
^0.1
不允许更新到0.2,因为在语义版本控制中,零点内容版本在转到零点内容+1时可能会引入不兼容的更改。

总结:

  • 更喜欢插入符运算符 - 这是强制使用最小补丁版本的最简单方法。
  • 优先选择 0.x 以上的版本(从 1.0.0 开始)并为您自己的代码使用语义版本控制。
  • 在开发阶段,您可以将
    alpha
    beta
    rc
    稳定性与预期的最终版本一起使用,即
    1.0.0-alpha1
    将是
    1.0.0
    未来的粗略轮廓。

0
投票

在您链接到的作曲家文档页面底部附近有一个非常有用的经验法则

 - ~ allows last digit specified to go up 
 - ^ doesn't allow breaking changes

有用的工具

理解 ~ 和 ^ 含义的一个简单方法是将它们与 Packagist Semver 检查器

示例

对于该页面的默认示例中提供的包

  • ~1.4.1“最后一位数字可以向上”,因此版本 1.4.1、1.4.2 或 1.4.3 对于作曲家来说都可以。
  • ^1.4.1“非破坏性版本”是 1.4.1 到 1.11.0(v2.0 是第一个破坏性更改)。
© www.soinside.com 2019 - 2024. All rights reserved.