В этой статье
Что такое семантическое версионирование?
Семантическое версионирование (SemVer) — схема версионирования, придающая значение каждой части номера версии. Созданная Томом Престоном-Вернером, SemVer обеспечивает универсальное соглашение для передачи характера и влияния изменений программного обеспечения исключительно через номера версий.
Следуя SemVer, разработчики и пользователи могут немедленно понять, вносит ли обновление критические изменения, новые функции или исправления ошибок — просто прочитав номер версии. Эта предсказуемость критически важна для управления зависимостями в современных экосистемах программного обеспечения.
Формат SemVer
Семантическая версия состоит из трёх числовых компонентов, разделённых точками: MAJOR.MINOR.PATCH.
- MAJOR — увеличивается при несовместимых изменениях API. Переход с 1.x.x на 2.0.0 сигнализирует о том, что существующий код может перестать работать
- MINOR — увеличивается при добавлении функциональности в обратно совместимом режиме. Переход с 1.2.x на 1.3.0 означает новые функции без нарушения существующих
- PATCH — увеличивается при обратно совместимых исправлениях ошибок. Переход с 1.2.3 на 1.2.4 означает, что исправлены только ошибки
- Каждый компонент должен быть неотрицательным целым числом и не должен содержать ведущих нулей (1.02.3 недопустимо)
Попробуйте бесплатно — без регистрации
Проверить версию SemVer →Диапазоны версий
Менеджеры пакетов используют диапазоны версий для указания совместимых версий зависимостей. Понимание этих диапазонов необходимо для надёжных сборок.
- Диапазоны карет (^1.2.3) — допускают изменения, не затрагивающие крайнюю левую ненулевую цифру. ^1.2.3 означает любую версию от 1.2.3 до, но не включая 2.0.0
- Диапазоны тильды (~1.2.3) — допускают только изменения уровня patch. ~1.2.3 означает любую версию от 1.2.3 до, но не включая 1.3.0
- Точная версия (1.2.3) — приемлема только эта конкретная версия, без гибкости
Сценарии использования
Семантическое версионирование является основой современного управления пакетами и рабочих процессов выпуска.
- npm, pip и Cargo — менеджеры пакетов полагаются на SemVer для разрешения деревьев зависимостей и предотвращения попадания критических изменений в производство
- Конвейеры CI/CD — автоматизированные системы используют теги SemVer для запуска сборок, публикации релизов и создания журналов изменений
- Версионирование API — REST API использует основные версии в URL-адресах (v1, v2) для поддержания обратной совместимости при развитии
- Авторы библиотек — публикация библиотеки с правильным SemVer сигнализирует пользователям, когда обновления безопасны
Предрелиз и метаданные
SemVer поддерживает два необязательных расширения, добавляющих контекст к номерам версий без влияния на правила приоритета.
- Идентификаторы предрелизной версии — добавляются после дефиса: 1.0.0-alpha, 1.0.0-beta.2, 1.0.0-rc.1. Они указывают на версии, которые ещё не стабильны и имеют более низкий приоритет, чем соответствующий релиз
- Метаданные сборки — добавляются после знака плюс: 1.0.0+build.123, 1.0.0-beta+exp.sha.5114f85. Метаданные сборки игнорируются при определении приоритета версии
- Предрелизные версии сортируются с использованием идентификаторов, разделённых точками: числовые идентификаторы сортируются числово, буквенно-цифровые — лексически
FAQ
Обрабатывается ли 0.x.x иначе, чем 1.x.x?
Да. В SemVer версия 0.x.x указывает на начальную разработку, где всё может измениться в любой момент. Публичный API не должен считаться стабильным. После выпуска 1.0.0 вы обязуетесь следовать правилам SemVer для всех последующих релизов.
Можно ли использовать v в качестве префикса (v1.2.3)?
Спецификация SemVer не включает префикс v — канонический формат: 1.2.3. Однако многие инструменты (теги Git, релизы GitHub) по соглашению используют v1.2.3. Большинство валидаторов принимают обе формы.
Что произойдёт, если я забуду увеличить мажорную версию при критическом изменении?
Потребители, использующие диапазоны карет, автоматически получат обновление, и их сборки могут неожиданно сломаться. Именно поэтому дисциплина SemVer критически важна — это социальный контракт между авторами библиотек и потребителями.