semver範囲チェッカー

npm の package.json に書く ^1.2.3 や ~1.2 がどのバージョンを許すのかを、展開した比較式と一覧の判定で確かめます。

バージョン範囲(npm の書き方)

"some-lib":

調べるバージョン(1行に1つ)

判定(SemVer 2.0.0 の優先順位で小さい順)

順バージョン判定

2つのバージョンを比べる

次のバージョン(npm version と同じ上げ方)

読み方のメモ

semver範囲チェッカーでできること

package.json の依存に書く ^1.2.3 や ~1.2、1.x || 2.x などの npm のバージョン範囲が、実際にどのバージョンを許すのかを確かめるツールです。範囲を比較式に展開し、手元のバージョン一覧のうちどれが一致するか、条件を満たす最大のバージョンはどれかを表示します。

使い方

  1. 「バージョン範囲(npm の書き方)」に範囲を入れます。下のボタン(^1.2.3、~1.2、^0.0.3、1.2 - 2.3 など)を押すと例が入ります。
  2. 展開結果に「>=1.2.3 <2.0.0-0」のような比較式と、各部分の意味が日本語で表示されます。必要なら「展開した式をコピー」を押します。
  3. 「調べるバージョン(1行に1つ)」に候補を入れると、右の判定表に SemVer の優先順位で小さい順に並び、一致・外(プレリリースのため)・最大が表示されます。
  4. 「2つのバージョンを比べる」で A と B の大小と、どの部分で決まったかを確認できます。
  5. 「次のバージョン」に今のバージョンを入れると、メジャー・マイナー・パッチ・プレリリースを上げた後の番号が表示されます。

計算の仕組みと注意点

よくある質問

^1.2.3 と ~1.2.3 の違いは?

^1.2.3 は 1.2.3 以上 2.0.0 未満で、マイナーとパッチの更新を許します。~1.2.3 は 1.2.3 以上 1.3.0 未満で、パッチの更新だけです。2つのボタンを押して展開結果と判定表を見比べると違いがわかります。

^0.2.3 や ^0.0.3 はどこまで更新されますか?

メジャーが0のときは範囲が狭くなり、^0.2.3 は 0.3.0 未満、^0.0.3 は 0.0.3 だけです。0.x の間は互換性のない変更が入りやすいためです。^0.0.3 のボタンで展開結果を確認できます。

1.2.3-beta.2 が ^1.2.3 に一致しないのはなぜ?

プレリリースは正式版 1.2.3 より前の順位なので、1.2.3 以上という条件を満たしません。また npm は、範囲に同じ番号のプレリリースが書かれていないとプレリリースを一致させない決まりです。判定表では「外(プレリリースのため)」などと表示されます。

上限に付いている -0 は何ですか?

<2.0.0-0 は「2.0.0 のどのプレリリースよりも前」という意味で、2.0.0-rc.1 なども範囲に入れないための書き方です。npm も ^ や ~ を展開するとこの形になります。