如何使用npm semver模块检查版本之间的兼容性?

时间:2014-08-23 05:12:03

标签: node.js semantic-versioning

使用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

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

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

在大多数情况下,

The caret operator应创建预期范围:

  

^1.2.3:= >=1.2.3-0 <2.0.0-0&#34;与1.2.3&#34;兼容。什么时候     使用插入符号运算符,指定版本中的任何内容(包括     预付款)将被支持,但不包括下一个     主要版本(或其预发行版)。 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&#34;与0.1.3&#34;兼容。 0.x.x版本是     special:因为semver规范指定了0.x.x个版本     没有稳定性保证,只考虑指定的版本     有效的。

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