首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

semver

安装

代码语言:javascript
复制
npm install --save semver

用法

作为节点模块:

作为命令行实用程序:

代码语言:javascript
复制
$ semver -h

SemVer 5.3.0

A JavaScript implementation of the http://semver.org/ specification
Copyright Isaac Z. Schlueter

Usage: semver [options] <version> [<version> [...]]
Prints valid versions sorted by SemVer precedence

Options:
-r --range <range>
        Print versions that match the specified range.

-i --increment [<level>]
        Increment a version by the specified level.  Level can
        be one of: major, minor, patch, premajor, preminor,
        prepatch, or prerelease.  Default level is 'patch'.
        Only one version may be specified.

--preid <identifier>
        Identifier to be used to prefix premajor, preminor,
        prepatch or prerelease version increments.

-l --loose
        Interpret versions and ranges loosely

-c --coerce
        Coerce a string into SemVer if possible
        (does not imply --loose)

Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.

If no satisfying versions are found, then exits failure.

Versions are printed in ascending order, so supplying
multiple versions to the utility will just sort them.

版本

http://semver.org/上v2.0.0规范 描述了“版本” 。

一个前导"=""v"字符被剥离并被忽略。

范围

A version range是一组comparators指定满足范围的版本。

A comparator由a operator和a 组成version。原语集operators是:

  • < 少于
  • <= 小于或等于
  • > 大于指定版本
  • >= 大于或等于
  • =等于。如果未指定运算符,则假定为相等,因此该运算符是可选的,但可以包括在内。

例如,比较器>=1.2.7将匹配的版本 1.2.71.2.82.5.3,和1.3.9,但不是版本1.2.61.1.0

比较器可以通过空格连接形成一个comparator set,它通过它包含的所有比较器的交集来满足。

范围由一个或多个比较器组组成,连接在一起||。当且仅当||版本满足至少一个分离的比较器集中的每个比较器时,版本才匹配范围。

例如,范围>=1.2.7 <1.3.0将匹配的版本 1.2.71.2.81.2.99,而不是版本1.2.61.3.01.1.0

范围1.2.7 || >=1.2.9 <2.0.0将匹配版本1.2.71.2.91.4.6,但不是版本1.2.82.0.0

预发布标签

如果版本具有预发布标记(例如1.2.3-alpha.3),则只有至少一个具有相同[major, minor, patch]元组的比较器也具有预发布标记时才允许它满足比较器集。

例如,>1.2.3-alpha.3允许范围与版本匹配1.2.3-alpha.7,但是根据SemVer排序规则,即使技术上“大于” ,也不会满足 。版本范围仅接受版本上的预发布标记。该版本满足范围,因为它没有预发布标志,并且大于。3.4.5-alpha.93.4.5-alpha.91.2.3-alpha.31.2.33.4.5 3.4.51.2.3-alpha.7

这种行为的目的是双重的。首先,预发布版本经常会很快更新,并且包含许多(通过作者的设计)尚未适合公共消费的重大更改。因此,默认情况下,它们从范围匹配语义中排除。

其次,选择使用预发布版本的用户已经清楚地表明了使用该特定 alpha / beta / rc版本集的意图。通过在范围中包括预发布标记,用户指示他们知道风险。但是,假设他们选择在下一组预发行版本上采取类似的风险仍然是不合适的。

预发行标识符

该方法.inc接受一个额外的identifier字符串参数,该字符串参数将字符串的值附加为预发布标识符:

代码语言:javascript
复制
semver 。inc (' 1.2.3 ','预发布',' beta ')??// ?'1.2.4-beta.0'

命令行示例:

代码语言:javascript
复制
$ semver 1.2.3 -i prerelease --preid beta1.2.4-beta.0

然后可以用来进一步增加:

代码语言:javascript
复制
$ semver 1.2.4-beta.0 -i预发布1.2.4-beta.1

高级范围语法

高级范围语法以确定的方式去处理原始比较器。

高级范围可以与使用空格或原始比较器的方式组合||

连字符范围 X.Y.Z - A.B.C

指定包含集。

  • 1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4

如果提供部分版本作为包含范围中的第一个版本,则缺少的部分将替换为零。

  • 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-范围 1.2.x 1.X 1.2.* *

任何的Xx*可被用来“站在”在数字值中的一个[major, minor, patch]元组。

  • *:= >=0.0.0(任何版本满足)
  • 1.x:= >=1.0.0 <2.0.0(匹配主要版本)
  • 1.2.x:= >=1.2.0 <1.3.0(匹配主要版本和次要版本)

部分版本范围被视为X范围,因此特殊字符实际上是可选的。

  • ""(空字符串):= *:=>=0.0.0
  • 1:= 1.x.x:=>=1.0.0 <2.0.0
  • 1.2:= 1.2.x:=>=1.2.0 <1.3.0

蒂尔德山脉 ~1.2.3 ~1.2 ~1

如果在比较器上指定了次要版本,则允许修补程序级更改。如果没有,则允许小级更改。

  • ~1.2.3:= >=1.2.3 <1.(2+1).0:=>=1.2.3 <1.3.0
  • ~1.2:= >=1.2.0 <1.(2+1).0:= >=1.2.0 <1.3.0(与1.2.x)相同
  • ~1:= >=1.0.0 <(1+1).0.0:= >=1.0.0 <2.0.0(与1.x)相同
  • ~0.2.3:= >=0.2.3 <0.(2+1).0:=>=0.2.3 <0.3.0
  • ~0.2:= >=0.2.0 <0.(2+1).0:= >=0.2.0 <0.3.0(与0.2.x)相同
  • ~0:= >=0.0.0 <(0+1).0.0:= >=0.0.0 <1.0.0(与0.x)相同
  • ~1.2.3-beta.2:= >=1.2.3-beta.2 <1.3.0请注意1.2.3,如果版本大于或等于,则允许使用版本中的预发行版beta.2。因此,1.2.3-beta.4将被允许??,但 1.2.4-beta.2不会,因为它是一个不同的[major, minor, patch]元组的预发布。

Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4

允许更改不会修改[major, minor, patch]元组中最左边的非零数字 。换句话说,这允许版本的补丁和次要更新1.0.0及以上,对版本补丁更新0.X >=0.1.0,并没有对版本的更新0.0.X

许多作者将0.x版本视为x主要的“突破性变化”指标。

插入符范围是理想的,当一个作家可能会使之间的重大更改0.2.40.3.0释放,这是一种常见的做法。但是,它假定在和之间不会有突破性的变化 。根据通常观察到的做法,它允许假定为加性(但不破坏)的变化。0.2.40.2.5

  • ^1.2.3 := >=1.2.3 <2.0.0
  • ^0.2.3 := >=0.2.3 <0.3.0
  • ^0.0.3 := >=0.0.3 <0.0.4
  • ^1.2.3-beta.2:= >=1.2.3-beta.2 <2.0.0请注意1.2.3,如果版本大于或等于,则允许使用版本中的预发行版beta.2。因此,1.2.3-beta.4将被允许??,但 1.2.4-beta.2不会,因为它是一个不同的[major, minor, patch]元组的预发布。
  • ^0.0.3-beta:= >=0.0.3-beta <0.0.4 请注意,如果0.0.3版本大于或等于,则允许版本中的预发行 版beta。所以,0.0.3-pr.2是允许的。

解析插入符号范围时,缺失patch值会消耗该数字0,但允许该值内的灵活性,即使主要版本和次要版本都是0

  • ^1.2.x := >=1.2.0 <2.0.0
  • ^0.0.x := >=0.0.0 <0.1.0
  • ^0.0 := >=0.0.0 <0.1.0

缺失minorpatch值将变为零,但也允许这些值内的灵活性,即使主要版本为零。

  • ^1.x := >=1.0.0 <2.0.0
  • ^0.x := >=0.0.0 <1.0.0

范围语法

把所有这些放在一起,这是一个针对范围的Backus-Naur语法,为了解析器作者的利益:

功能

所有方法和类都采用最终的loose布尔参数,如果为真,则会对不完全有效的 semver 字符串更宽容。当然,结果输出总是100%严格。

严格模式比较器和范围将严格关于它们解析的 SemVer 字符串。

  • valid(v):返回解析后的版本,如果无效,则返回 null。
  • inc(v, release):回到依释放型(递增的版本majorpremajorminorpreminorpatchprepatch,或prerelease)或null如果它是无效的
    • premajor在一个电话会议中,将版本升级到下一个主要版本,直到该主要版本的预发行版。 preminor,并prepatch以同样的方式工作。
    • 如果从非预发布版本调用,prerelease则将使用相同的prepatch。它会增加补丁版本,然后进行预发布。如果输入版本已经是预发行版,则只需将其递增即可。
  • prerelease(v):返回一个预发布组件数组,如果不存在则返回null。例:prerelease('1.2.3-alpha.1') -> ['alpha', 1]
  • major(v):返回主版本号。
  • minor(v):返回次要版本号。
  • patch(v):返回补丁版本号。
  • intersects(r1, r2, loose):如果两个提供的范围或比较器相交,则返回true。

对照

  • gt(v1, v2)v1 > v2
  • gte(v1, v2)v1 >= v2
  • lt(v1, v2)v1 < v2
  • lte(v1, v2)v1 <= v2
  • eq(v1, v2)v1 == v2如果它们在逻辑上是等价的,即使它们不是完全相同的字符串,也是如此。您已经知道如何比较字符串。
  • neq(v1, v2)v1 != v2相反的eq
  • cmp(v1, comparator, v2):传入比较字符串,它将调用上面的相应函数。"===""!=="进行简单的字符串比较,但包括完整性。如果提供了无效的比较字符串,则抛出。
  • compare(v1, v2):返回0如果v1 == v2,或1如果v1是更大的,或者-1如果 v2是更大的。如果传递给,则按升序排序Array.sort()
  • rcompare(v1, v2):比较的反面。传递给时按降序对版本数组进行排序Array.sort()
  • diff(v1, v2):由释放类型返回两个版本之间的差异(majorpremajorminorpreminorpatchprepatch,或prerelease),或者为 null 如果版本是相同的。

比较

  • intersects(comparator):如果比较器相交,则返回 true

范围

  • validRange(range):返回有效范围,如果无效,则返回 null
  • satisfies(version, range):如果版本满足范围,则返回 true。
  • maxSatisfying(versions, range):返回列表中满足范围的最高版本,或者null如果没有。
  • minSatisfying(versions, range):返回列表中满足范围的最低版本,或者null如果没有。
  • gtr(version, range)true如果版本大于该范围内可能的所有版本,则返回。
  • ltr(version, range)true如果版本小于该范围内可能的所有版本,则返回。
  • outside(version, range, hilo):如果版本在高或低方向范围之外,则返回true。该 hilo参数必须是字符串'>''<'。(这是由gtr和调用的函数ltr。)
  • intersects(range):如果任何范围比较器相交,则返回 true

请注意,由于范围可能是非连续的,因此版本可能不会大于范围,小于范围满足范围!例如,范围1.2 <1.2.9 || >2.0.0将有一个1.2.9 直到2.0.0,因此版本1.2.10不会大于范围(因为2.0.1满足,更高),也不会小于范围(因为1.2.8满足,这是更低),它也不会满足范围。

如果您想知道版本是否满足或不满足范围,请使用该satisfies(version, range)功能。

强迫

  • coerce(version):如果可能,将字符串强制转换为semver

这旨在为非semver提供非 semver 字符串的非常宽容的翻译。它看起来在字符串的第一个数字,并且消耗所有剩余的字符满足至少一个局部 semver(例如11.21.2.3)直到最大允许长度(256个字符)。更长的版本被简单地截断(4.6.3.9.2-alpha2变成4.6.3)。所有周围文本都被忽略(v3.4 replaces v3.3.1变成3.4.0)。只有缺少数字的文本才会失败强制(version one无效)。考虑强制的任何半成分的最大长度为16个字符; 较长的组件将被忽略(10000000000000000.4.7.4变为4.7.4)。任何 semver 组件的最大值是Integer.MAX_SAFE_INTEGER || (2**53 - 1); 较高价值的组件无效(9999999999999999.4.7.4可能无效)。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com