SemVer バリデーター

セマンティックバージョンを検証し、範囲を解析します。

バージョンとして認められるもの

厳格な SemVer 2.0.0 の文法です。3つの数値は先頭ゼロのない非負の ASCII 整数です。

MAJOR.MINOR.PATCH
破壊的 / 互換 / 修正
1.2.3-alpha.1
プレリリース、1.2.3 より下位
1.2.3+build.5
ビルドメタデータ、優先順位では無視
1.2.3-0.3
数値のプレリリース識別子は数値として比較
v1.2.3
セマンティックバージョンではない(仕様 FAQ)
01.2.3
無効: 先頭のゼロ
1.2.3-01
無効: ゼロ埋めされた数値プレリリース
1.2.3+0.09
有効: ビルドメタデータはゼロ埋め可能

範囲演算子

1.2.3
このバージョンに完全一致
^1.2.3
互換: >=1.2.3 <2.0.0-0
~1.2.3
パッチのみ: >=1.2.3 <1.3.0-0
>=1.2.3 <2.0.0
1つのセット内のコンパレーターの AND
1.2.3 - 2.0.0
両端を含む範囲、両側にスペースが必要
1.2.x / 1.x / *
部分バージョンとワイルドカード
a || b
和集合: どちらかのセットが一致すればよい
~>1.2.3
npm の歴史的なエイリアス、~1.2.3 として扱う

npm が部分バージョンを補完する方法

node-semver で検証済みです。-0 接尾辞は、次の系列のプレリリースを除外する npm のセンチネルです。

npm が部分バージョンを補完する方法
範囲展開後
^1.2.3>=1.2.3 <2.0.0-0
^0.2.3>=0.2.3 <0.3.0-0
^0.0.3>=0.0.3 <0.0.4-0
^1>=1.0.0 <2.0.0-0
~1.2.3>=1.2.3 <1.3.0-0
~1.2>=1.2.0 <1.3.0-0
~1>=1.0.0 <2.0.0-0
1.2.x>=1.2.0 <1.3.0-0
1.x>=1.0.0 <2.0.0-0
1.2.3 - 2.0.0>=1.2.3 <=2.0.0
1.2.3 - 2>=1.2.3 <3.0.0-0
>1.x>=2.0.0

プレリリースの優先順位

1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

数値の識別子は数値として比較され、英数字の識別子より下位になります。短い接頭辞はより下位です。ビルドメタデータは常に無関係です。

よくある間違い

package.json やチャットログからそのまま貼り付けられるものです。

"1.2.3",
package.json から引用符とカンマが付いてきました。バージョンだけを貼り付けてください。
v1.2.3
Git タグには v が付きますが、セマンティックバージョンには付きません。
1.2
2つの数値はバージョンではなく範囲です。
1.2.3-01
npm の loose モードは 1.2.3-1 として読み取り、黙って書き換えます。

どのルールブックが使われるか

  • バージョン文字列の判定は厳格な SemVer 2.0.0 です。loose モード、書き換え、正規化は行いません。
  • 範囲は npm の node-semver に従います。SemVer 仕様は範囲を定義していないためです。
  • このツールは範囲に関して npm より厳格です。範囲内の v 接頭辞や先頭ゼロは拒否され、|| の片側が空の場合は「任意のバージョン」ではなくエラーになります。
  • 無効なバージョンに対して表示される npm の読み取りは、semver.valid(v, {loose:true}) と semver.coerce(v) によるものです。参考情報であり、合格を意味することはありません。
  • 位置はコードポイントを数え、インターフェースでは 1 から、JSON では 0 から始まります。

使い方

  1. 1.2.3-beta.1+build.5 のようなバージョンを左のフィールドに貼り付けます。下の内容は入力に合わせて更新され、押すボタンはありません。
  2. 必要に応じて ^1.2.0 のような npm の範囲を右に貼り付け、バージョンと範囲の関係を確認します。
  3. まずバッジを確認します。有効かどうか、無効な場合はどの文字位置でどのルールに違反したかが表示されます。
  4. 範囲の npm includePrerelease の読み取りを確認したい場合は「プレリリースを含める」にチェックを入れます。
  5. JSON 結果を展開すると、問題の完全なリストをコピーまたはダウンロードできます。

実行例

バージョン + 範囲

1.2.3-beta.1+build.5  ^1.2.0

結果

有効な SemVer(MAJOR 1、MINOR 2、PATCH 3、プレリリース beta.1、ビルド build.5)。^1.2.0 は >=1.2.0 <2.0.0-0、境界 [1.2.0, 2.0.0) に展開されます。判定: 満たしていません - セットに 1.2.3 用のプレリリースコンパレーターがありません。

「プレリリースを含める」にチェックを入れると、同じ組み合わせが満たすと判定されます。

制限

  • 判定は厳格な SemVer 2.0.0 のため、npm の loose モードが受け入れるか書き換える v1.2.3 や 1.2.3-01 でも拒否されます。
  • 範囲は npm の node-semver のみに従います。git describe、Cargo、PEP 440、Go モジュールのバージョンは対象外です。
  • レジストリの検索は行いません。^1.2.0 が実際にどのバージョンをインストールするかはわかりません。
  • 一度に1つのバージョンと1つの範囲のみです。バッチリスト、並べ替え、ペア比較、バンプのプレビューはありません。
  • Number.MAX_SAFE_INTEGER を超えるコア数値はフラグが付けられ、テキストとして比較されます。JS の数値に変換されることはありません。
  • 何もページから出ません。ネットワーク、ストレージ、URL パラメーターはなく、再読み込みするとすべて消去されます。

すべてブラウザ内で動作する、その他の開発者向けツールです。