【问题标题】:How do I check for compatibility between versions with the npm semver module?如何使用 npm semver 模块检查版本之间的兼容性?
【发布时间】:2014-10-16 23:54:21
【问题描述】:

使用the semver package 我没有看到一种简单的方法来检查我是否需要某个库版本是否有兼容的版本。这让我想知道我是否遗漏了一些明显的东西,因为它看起来像是一个常见的操作。

根据Semver.org,任何相同或新但不在新主要版本中的版本都应该是兼容的。因此,如果我需要1.2.3 而我有>=1.2.3 <2.0.0,那么一切都很好。我可以手动建立这种比较,它似乎很常见,我很好奇我是否错过了一种更简单的方法。

换句话说,看来我必须这样做

var canUse = function(need, have) { 
  var nextMajorVersion = semver.inc(need, 'major'); 
  return semver.satisfies(have, '>=' + need + ' && ' + '<' + nextMajorVersion); 
};

哪个有效

canUse('1.2.3', '1.2.3');  // true
canUse('1.2.3', '1.2.4');  // true
canUse('1.2.3', '1.3.0');  // true
canUse('1.2.3', '0.4.4');  // false
canUse('1.2.3', '2.4.4');  // false

是的,这是一小段代码。看起来这将是一个如此常见的操作,我不必操作字符串并手动构建范围比较只是为了检查一个常见问题,X 是否与 Y 兼容。

有没有更简单的方法?

【问题讨论】:

    标签: node.js semantic-versioning


    【解决方案1】:

    The caret operator 在大多数情况下应该创建预期的范围:

    ^1.2.3 := &gt;=1.2.3-0 &lt;2.0.0-0 “与 1.2.3 兼容”。什么时候 使用插入符号运算符,指定版本中的任何内容(包括 prerelease) 将支持到但不包括下一个 主要版本(或其预发行版)。 1.5.1 将满足 ^1.2.3, 而1.2.22.0.0-beta 不会。

    semver.satisfies('1.2.3', '^1.2.3') // true
    semver.satisfies('1.2.4', '^1.2.3') // true
    semver.satisfies('1.3.0', '^1.2.3') // true
    semver.satisfies('0.4.4', '^1.2.3') // false
    semver.satisfies('2.4.4', '^1.2.3') // false
    

    0.x.x 版本除外。对于这些,^ 将被忽略。

    ^0.1.3 := 0.1.3 “与 0.1.3 兼容”。 0.x.x 版本是 特别:因为 semver 规范指定 0.x.x 版本使 没有稳定性保证,只考虑指定的版本 有效。

    semver.satisfies('0.8.9', '^0.1.0') // false
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2012-08-14
      • 2020-10-16
      • 2018-05-14
      • 2011-07-21
      • 2011-02-12
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      相关资源
      最近更新 更多