pacakge.json 中依赖版本的记忆技巧
文章介绍了版本号的组成(主版本号、次版本号、修订号)以及两种范围符号 `^` 和 `~` 的作用。`^` 符号允许从最左边非零元素开始固定版本号,并在其后进行更新;`~` 符号则根据是否存在次版本号决定是否允许修改修订号或次版本号。 2025-2-20 16:0:0 Author: taxodium.ink(查看原文) 阅读量:19 收藏

再次回顾一下版本号的组成: 主版本号.次版本号.修订号 (major.minor.patch)。

^ (Caret Ranges)
允许不修改 [major, minor, patch] 元组中最左边非零元素的更改。换句话说,这允许对 1.0.0 及以上版本进行补丁和次要更新,对 0.X >=0.1.0 版本进行补丁更新,对 0.0.X 版本不进行更新。
  • ^1.2.3 :=1 >=1.2.3 <2.0.0-0
  • ^0.2.3 := >=0.2.3 <0.3.0-0
  • ^0.0.3 := >=0.0.3 <0.0.4-0
  • ^1.2.3-beta.2 := >=1.2.3-beta.2 <2.0.0-0
  • ^0.0.3-beta := >=0.0.3-beta <0.0.4-0
  • ^1.2.x := >=1.2.0 <2.0.0-0
  • ^0.0.x := >=0.0.0 <0.1.0-0
  • ^0.0 := >=0.0.0 <0.1.0-0
  • ^1.x := >=1.0.0 <2.0.0-0
  • ^0.x := >=0.0.0 <1.0.0-0

在正则表达式中, ^ 表示匹配匹配字符串的开头,利用这个联想, ^ 表示的就是从头(最左边)开始,找第一个非 0 的版本号,固定这一位版本号。

例如 ^0.1.2 ,从头开始第一个非 0 的版本号是第二位版本号 1 ,因此第二位之前都是固定的,因此可以推断出它表示的范围是 >=0.1.2 <0.2.0

再如 ^1 , 首先补全到 3 位版本号,即 ^1.0.0 ,从头开始第一个非 0 的版本号是第一位的 1 ,因此第一位版本号是固定的,范围是 >=1.0.0 <2.0.0

特殊的 ,当 3 位版本号都是 0 的时候,即 ^0.0.0 , 此时从头往后找不到非 0 的版本号,则固定第一位,即固定主版本号,其他版本号随意,范围是 >=0.0.0 <1.0.0

~ (Tilde Ranges)
如果存在 次版本号 ,则允许进行 修订号 修改。如果没有,则允许 次版本号 的更改。
  • ~1.2.3 := >=1.2.3 <1.3.0-0
  • ~1.2 := >=1.2.0 <1.3.0-0 (Same as 1.2.x)
  • ~1 := >=1.0.0 <2.0.0-0 (Same as 1.x)
  • ~0.2.3 := >=0.2.3 <0.3.0-0
  • ~0.2 := >=0.2.0 <0.3.0-0 (Same as 0.2.x)
  • ~0 := >=0.0.0 <1.0.0-0 (Same as 0.x)
  • ~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0-0

~ 常见于表示的一个范围,例如 1 ~ 3, 它往往是夹在中间的,也就是中间第二位,而它的作用就是针对第二位的 次版本号(minor), 如果第二位(minor)存在,则可以改第三位(patch);如果第二位(minor)不存在,则可以改第二位(minor)。

例如 ~1.2.3 , 第二位 2 ,存在第二位,因此固定第二位,范围是 >=1.2.3 < 1.3.0

例如 ~1.0.3 , 第二位 0 ,存在第二位,因此固定第二位,范围是 >=1.0.3 < 1.1.0

例如 ~1, 不存在第二位,因此可以修改第二位,范围是 >=1.0.0 <2.0.0

例如 ~0, 不存在第二位,因此可以修改第二位,范围是 >=0.0.0 <1.0.0


文章来源: https://taxodium.ink/package-json-version-remember-trick.html
如有侵权请联系:admin#unsafe.sh