npm の package.json に書く ^1.2.3 や ~1.2 がどのバージョンを許すのかを、展開した比較式と一覧の判定で確かめます。
| 順 | バージョン | 判定 |
|---|
^ は「いちばん左の0でない数字」を変えない範囲。^1.2.3 は 2.0.0 未満、^0.2.3 は 0.3.0 未満、^0.0.3 は 0.0.3 だけ。~ はパッチ(3つ目)の更新だけを許します。~1.2.3 は 1.3.0 未満。~1 は 2.0.0 未満。-0 は「そのバージョンのプレリリースより前」という意味で、<2.0.0-0 は 2.0.0-rc.1 も含みません。1.2.3-beta.2 のようなプレリリースは、範囲の中に同じ 1.2.3 のプレリリースを書いた比較式があるときだけ一致します(^1.2.3 には一致しない)。+build は順位に影響しません。package.json の依存に書く ^1.2.3 や ~1.2、1.x || 2.x などの npm のバージョン範囲が、実際にどのバージョンを許すのかを確かめるツールです。範囲を比較式に展開し、手元のバージョン一覧のうちどれが一致するか、条件を満たす最大のバージョンはどれかを表示します。
^1.2.3 は 1.2.3 以上 2.0.0 未満で、マイナーとパッチの更新を許します。~1.2.3 は 1.2.3 以上 1.3.0 未満で、パッチの更新だけです。2つのボタンを押して展開結果と判定表を見比べると違いがわかります。
メジャーが0のときは範囲が狭くなり、^0.2.3 は 0.3.0 未満、^0.0.3 は 0.0.3 だけです。0.x の間は互換性のない変更が入りやすいためです。^0.0.3 のボタンで展開結果を確認できます。
プレリリースは正式版 1.2.3 より前の順位なので、1.2.3 以上という条件を満たしません。また npm は、範囲に同じ番号のプレリリースが書かれていないとプレリリースを一致させない決まりです。判定表では「外(プレリリースのため)」などと表示されます。
<2.0.0-0 は「2.0.0 のどのプレリリースよりも前」という意味で、2.0.0-rc.1 なども範囲に入れないための書き方です。npm も ^ や ~ を展開するとこの形になります。