SemVer バリデーター
セマンティックバージョンを検証し、範囲を解析します。
バージョン
- MAJOR
- MINOR
- PATCH
- プレリリース
- ビルドメタデータ
範囲
JSON 結果
バージョンとして認められるもの
厳格な 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 のセンチネルです。
| 範囲 | 展開後 |
|---|---|
| ^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.2.3-beta.1+build.5 のようなバージョンを左のフィールドに貼り付けます。下の内容は入力に合わせて更新され、押すボタンはありません。
- 必要に応じて ^1.2.0 のような npm の範囲を右に貼り付け、バージョンと範囲の関係を確認します。
- まずバッジを確認します。有効かどうか、無効な場合はどの文字位置でどのルールに違反したかが表示されます。
- 範囲の npm includePrerelease の読み取りを確認したい場合は「プレリリースを含める」にチェックを入れます。
- 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 パラメーターはなく、再読み込みするとすべて消去されます。
関連ツール
すべてブラウザ内で動作する、その他の開発者向けツールです。