0

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

根据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 兼容。

有没有更简单的方法?

4

1 回答 1

1

在大多数情况下,插入符运算符应创建预期范围:

^1.2.3:= >=1.2.3-0 <2.0.0-0 "兼容1.2.3"。使用插入符号运算符时,将支持指定版本(包括预发行版)到但不包括下一个主要版本(或其预发行版)的任何内容。1.5.1会满足^1.2.3,而1.2.2不会2.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。对于这些, a^将被忽略。

^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
于 2014-08-23T06:00:38.797 回答