package.json中的版本号

一直对 package.json 文件中的版本号处于一个清晰与模糊之间的界限
也知道这个版本号是遵循 semver的规则.
但是这个规则中是没有比如 ^~ 等标志的规定的. 所以具体到 package.json 中这些版本是什么意思呢?

我列举了一下, 这其中的场景, 直接给出解释. 不过在此之前, 需要简单说一下, 详细的可以参照我上边说的 semver 的解释.

版本号, 大体上分为 3 个部分 a.b.c-xyz

  • a 为主版本号, 不过一般版本号 0 不作为正式版本发布, 并且版本之间不一定实现兼容
  • b 为次版本号, 在此版本上有一些功能性的区分
  • c 为修订号, 可以进行比如一些bug上的修正
  • xyz 的部分为一些更细节的标注等,不过这些有标注的版本号按照规定是低于正式的版本号的, 比如 1.1.1-beta 是低于 1.1.1 的.

整体解释

说一些经常让人费解的 ^&

  • ^ 表示与版本兼容, 兼容就很有意思, 什么叫兼容呢, 按照 semver 中第一个号码之间我们认为是不兼容的, 即 1.0.0 与 2.0.0 是不一定兼容的. 但是存在一些场景,比如 1.1.0 兼容版本从最左边的非0版本号算起, 即 ^1.1.0 表示 >=1.1.0 <2.0.0. ^0.0.3 表示 >=0.0.3 <0.0.4
  • ~ 表示约等于版本, 即 如果存在次版本号,则允许修订号为更高版,否则允许次版本号为更高版。人话的意思就是说 ~1.2.0 存在 次版本号 2, 那么表示为 >=1.2.0 <1.3.0, 即修改修订号; ~1.0.0 只有最高版本号, 那么表示 >=1.0.0 <2.0.0, 即修改次版本号

^ 表示兼容,(我们从最左侧的非0版本号算起); ~ 表示约等于, 我们将"最右侧"的版本号进行"约算"

下边就列举一些版本号的一些具体解释

表达式 范围 解释
1.2.3 1.2.3 精确匹配1.2.3版本
~1.2.3 >=1.2.3 <1.3.0 将"最右侧"的进行约等
~1.0.0 >=1.0.0 <2.0.0
^1.2.3 >=1.2.3 <2.0.0 将最左侧的非0以下的位数进行兼容
^0.0.3 >=0.0.3 <0.0.4

其他的情况就比较好理解了.
X x * 表示通配
>= <= - 直接进行理解就可以了

附上一些参考链接:
semver
看看俺 – KanKanAn.com

原文地址:https://www.cnblogs.com/asdfq/p/13799791.html