Валидатор SemVer
Проверяйте семантические версии и разбирайте диапазоны.
Версия
- MAJOR
- MINOR
- PATCH
- Пререлиз
- Метаданные сборки
Диапазон
Результат JSON
Что считается версией
Строгая грамматика SemVer 2.0.0. Три числа — неотрицательные целые 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.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
- Два числа — это диапазон, а не версия.
- 1.2.3-01
- Нестрогий режим npm читает это как 1.2.3-1 и молча переписывает.
По какому своду правил
- Вердикт по строке версии — строгий SemVer 2.0.0: без нестрогого режима, без переписывания, без нормализации.
- Диапазоны следуют npm node-semver, поскольку спецификация SemVer не определяет диапазоны.
- В диапазонах инструмент строже npm: префикс v или ведущий ноль внутри диапазона отклоняются, а пустая сторона || считается ошибкой, а не «любой версией».
- Толкования npm для некорректной версии получены из semver.valid(v, {loose:true}) и semver.coerce(v). Это только информация — никогда не зачёт.
- Позиции считаются в кодовых точках и начинаются с 1 в интерфейсе и с 0 в JSON.
Как пользоваться
- Вставьте версию, например 1.2.3-beta.1+build.5, в левое поле. Всё ниже обновляется по мере ввода — нажимать кнопку не нужно.
- При желании вставьте справа диапазон npm, например ^1.2.0, чтобы увидеть, как версия соотносится с диапазоном.
- Сначала прочитайте значок: корректно или нет, а если нет — какое правило нарушено и на каком символе.
- Включите «Учитывать пререлизы», если нужно толкование диапазона с includePrerelease, как в npm.
- Разверните «Результат 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, поэтому v1.2.3 и 1.2.3-01 отклоняются, хотя нестрогий режим npm их принимает или переписывает.
- Диапазоны следуют только npm node-semver — версии git describe, Cargo, PEP 440 и модулей Go не входят в область применения.
- Обращений к реестру нет: инструмент не скажет, какая версия на самом деле установится по ^1.2.0.
- Одна версия и один диапазон за раз — без пакетных списков, сортировки, попарного сравнения и предпросмотра повышения версии.
- Основные номера выше Number.MAX_SAFE_INTEGER помечаются и сравниваются как текст, никогда не преобразуясь в число JS.
- Ничего не покидает страницу: без сети, хранилища и параметров URL — перезагрузка всё очищает.
Похожие инструменты
Другие помощники разработчика, которые работают полностью в вашем браузере.