一直对 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