Семантично версиониране: Какво е и защо е важно?
Семантичното версиониране (на англ. Semantic Versioning или SemVer) е стандартизиран начин за номериране на версиите на софтуер, който улеснява разработчиците и потребителите да разбират какви промени настъпват между различните версии на даден продукт.
Какво е семантично версиониране?
Семантичното версиониране използва формат от вида:
MAJOR.MINOR.PATCH
Например: 2.5.1
Какво означават числата?
- MAJOR (главна версия): Се променя при несъвместими промени, които могат да счупят съществуващия код.
- MINOR (второстепенна версия): Се променя при добавяне на нови функционалности, които не нарушават съвместимостта.
- PATCH (кръпка): Се променя при поправка на бъгове, без да се добавят нови функции.
Пример
Ако имаш библиотека с версия 1.4.2
и направиш следното:
- Поправиш бъг → новата версия ще бъде
1.4.3
- Добавиш нова функция, без да чупиш съвместимост →
1.5.0
- Направиш сериозна промяна, която не е съвместима с предишната версия →
2.0.0
Защо е важно?
Прогнозируемост
Потребителите знаят какво да очакват от нова версия – дали просто съдържа поправки или включва промени, които може да наложат промени в техния код.
Съвместимост
Системите за управление на зависимости (npm, pip, Composer и др.) използват SemVer, за да определят дали една версия е съвместима с друга.
По-добра комуникация
Екипите и потребителите имат ясен език за обсъждане на промените – „това е MINOR ъпдейт“, „имаме MAJOR breaking change“ и т.н.
Официални правила (SemVer 2.0.0)
- Версията винаги трябва да има формат
X.Y.Z
, къдетоX
,Y
иZ
са цели положителни числа. - Не трябва да се използват водещи нули (напр.
01.0.0
е невалидна). - Предварителни версии и метаданни могат да бъдат добавени:
- Пример:
1.0.0-alpha
,2.1.0-beta+build123
- Пример:
Какво не е SemVer?
- Това не е гаранция за качество – версия
1.0.0
може да има много бъгове. - Не всички проекти следват SemVer точно – някои използват собствени схеми или “релативно версиониране” (например
2024.05.19
).
Примери от практиката
- Node.js: стриктно следва SemVer
- Laravel (PHP): използва SemVer за своите основни версии
- React (JS): обикновено спазва SemVer, но breaking промените понякога се обявяват в MINOR версиите (със силна документация)
Семантичното версиониране е повече от просто номер – това е договор между разработчика и потребителя. Следването на SemVer показва зрялост на проекта, добра документация и мисъл за стабилност.