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 に答える