美文网首页码农的世界程序员
06. NPM 世界中的版本号种类

06. NPM 世界中的版本号种类

作者: pengisgood | 来源:发表于2017-11-11 21:23 被阅读125次
    NPM Semver

    之前我们以 NPM 为例,说到了语义化版本如何在项目中落地的问题,大家也见识了版本号表示方式的灵活性。今天我们来掰扯掰扯 NPM 世界里的版本号都有哪些表示法以及各自的含义。

    版本号

    这里我们说的版本都是指 http://semver.org/ 2.0.0 中定义的版本号,版本号中打头的=v字符都会被忽略掉。

    区间

    版本区间比较器的集合表示,比较器由五种基本逻辑运算符(>>=<<==)表示。如果没有指定运算符,默认为=。一个版本区间可以有多个比较器的集合构成,通过||并起来。比如:

    1.2.7 || >=1.2.9 <2.0.0
    

    可以匹配的版本有1.2.7,1.2.9,1.4.6等,但是不会匹配上1.2.8或者2.0.0。

    Hyphen(-) 区间

    一般形式为:X.Y.Z - A.B.C,表示的是一个闭区间,等价于 >=X.Y.Z <=A.B.C。

    如果前半部分不是一个完整的版本号,则默认会以0补全。比如:

    1.2 - 2.3.4 等价于 >=1.2.0 <2.3.4
    

    如果后半部分是一个不完整的区间,则所有以该版本号打头的版本都能被接受。比如:

    1.2.3 - 2.3 等价于 >=1.2.3 <2.4.0
    1.2.3 - 2 等价于 >=1.2.3 <3.0.0
    

    X 区间

    常常用xX*来代替【主版本号,次版本号,修订版本号】中的一个数字。比如:

    * 等价于 >=0.0.0(任意版本)
    1.x 等价于 >=1.0.0 <2.0.0(匹配主版本号)
    1.2.x 等价于 >=1.2.0 <1.3.0(匹配主版本号和次版本号)
    

    其实一个不完整的版本号可以认为就是一个 X 区间,只是xX*被省略了,因此这三个特殊的符号其实是可加可不加的。

    Tilde(~) 区间

    如果只指定了主版本号,则只比较主版本号;如果指定了主版本号和次版本号,则比较二者;如果都指定了,则都比较。比如:

    ~1 等价于 >=1.0.0 <2.0.0 也等价于 1.x
    ~1.2 等价于 >=1.2.0 <1.3.0 也等价于 1.2.x
    ~1.2.3 等价于 >=1.2.3 <1.3.0
    

    Caret(^) 区间

    以左起第一个不为零的数字加一构成区间的上限。举例说明:

    ^1.2.3 等价于 >=1.2.3 <2.0.0
    ^1.2 等价于 >=1.2.0 <2.0.0 也等价于 ^1.2.x
    ^1 等价于 >=1.0.0 <2.0.0 也等价于 ^1.x
    ^0.0.3 等价于 >=0.0.3 <0.0.4 也等价于 =0.0.3
    ^0.2.3 等价于 >=0.2.3 <0.3.0
    ^0.0 等价于 >=0.0.0 <0.1.0 也等价于 ^0.0.x
    ^0 等价于 >=0.0.0 <1.0.0 也等价于 ^0.x
    

    为什么需要这种表示法呢?对于主版本号大与0的版本号来说,看上去似乎没有太大意义。但对于处于开发阶段的0.x 的版本来说,却非常有帮助,因为这个阶段通常我们升级次版本号表示有向下不兼容的改动,这也是社区里的一个常见做法。

    参考资料

    http://semver.org/spec/v2.0.0.html
    https://docs.npmjs.com/misc/semver

    相关文章

      网友评论

        本文标题:06. NPM 世界中的版本号种类

        本文链接:https://www.haomeiwen.com/subject/htugmxtx.html