← Назад к вопросам

Что такое семантическое версионирование?

1.0 Junior🔥 111 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Семантическое версионирование (Semantic Versioning)

Семантическое версионирование (SemVer) - это стандартная система версионирования, которая определяет, как нумеровать версии программного обеспечения. Это позволяет разработчикам понять, насколько совместимо обновление с предыдущей версией.

Формат версии

Версия состоит из трех чисел: MAJOR.MINOR.PATCH

1.5.3
↑ ↑ ↑
│ │ └─ PATCH (исправления и багфиксы)
│ └──── MINOR (новые функции, обратно совместимые)
└────── MAJOR (ломающие изменения)

Компоненты версии

1. MAJOR (Мажорная версия)

Изменяется, когда сделаны ломающие изменения - изменения, которые несовместимы с предыдущей версией:

// Версия 1.0.0
function greet(name) {
  return 'Hello, ' + name
}

// Версия 2.0.0 - ломающее изменение
function greet(options) {  // Изменилась сигнатура функции
  return 'Привет, ' + options.name
}

// MAJOR версия: 1.0.0 -> 2.0.0

2. MINOR (Минорная версия)

Изменяется при добавлении новой функциональности, которая обратно совместима с предыдущей версией:

// Версия 1.0.0
function add(a, b) {
  return a + b
}

// Версия 1.1.0 - добавлена новая функция
function add(a, b, precision = 2) {
  return parseFloat((a + b).toFixed(precision))
}

// Старый код работает: add(1, 2) = 3
// Новый параметр опционален, поэтому совместимо
// MINOR версия: 1.0.0 -> 1.1.0

3. PATCH (Версия патча)

Изменяется при исправлении багов, без добавления функциональности:

// Версия 1.1.0
function add(a, b, precision = 2) {
  return parseFloat((a + b).toFixed(precision))
}

// Версия 1.1.1 - исправлен баг
function add(a, b, precision = 2) {
  const result = a + b
  return parseFloat(result.toFixed(precision))
}

// PATCH версия: 1.1.0 -> 1.1.1

Примеры версионирования

Новая библиотека - начинаем с 0.1.0 или 1.0.0:

0.0.1  - первая экспериментальная версия
0.1.0  - первый публичный релиз
0.2.0  - добавлена новая функция
0.2.1  - исправлен баг
1.0.0  - первая стабильная версия
1.1.0  - добавлена функция
2.0.0  - ломающие изменения

История версий React:

0.3.0  - начало
0.11.0 - стабилизация
0.12.0 - новые API
16.0.0 - переписано на Fiber (ломающие изменения)
16.1.0 - улучшения
16.2.0 - новые хуки
17.0.0 - ломающие изменения
18.0.0 - Concurrent Features
18.1.0 - улучшения
18.2.0 - новые функции

Правила семантического версионирования

1. Начинай с 0.1.0 или 1.0.0

1.0.0 - первая публичная версия
0.1.0 - развивающийся проект

2. После 1.0.0 используй SemVer

1.0.0 - первая стабильная версия
1.0.1 - патч
1.1.0 - минорная версия
2.0.0 - мажорная версия

3. MAJOR версия всегда вперед с обнулением остальных

1.5.3 -> 2.0.0
       (не 2.5.3)

4. MINOR версия обнуляет PATCH

1.5.3 -> 1.6.0
       (не 1.6.3)

5. PATCH версия не влияет на другие

1.5.3 -> 1.5.4

Использование в package.json

{
  "dependencies": {
    "react": "^18.2.0",
    "vue": "~3.2.0",
    "lodash": "4.17.21",
    "webpack": "^5.70.0"
  }
}

Символы версионирования:

^ (Caret) - совместимо с MINOR

^18.2.0 означает >= 18.2.0 и < 19.0.0
Позволяет обновляться на MINOR и PATCH
Обновит до 18.5.2, но не до 19.0.0

~ (Tilde) - совместимо с PATCH

~3.2.0 означает >= 3.2.0 и < 3.3.0
Позволяет обновляться только на PATCH
Обновит до 3.2.5, но не до 3.3.0

= (точная версия)

4.17.21 означает ровно 4.17.21
Обновлений не будет

Примеры реальной жизни

Обновление React с 16 на 17:

16.13.1 -> 17.0.0 (MAJOR версия)
Это ломающее обновление:
- Изменился render API
- Изменилась работа с событиями
- Требуется обновить код приложения

Обновление React с 17 на 18:

17.0.2 -> 18.0.0 (MAJOR версия)
Ломающие изменения:
- Изменилось поведение Suspense
- Изменилась автоматическая батчинговка

Обновление Next.js:

12.0.0 - старая версия
12.1.0 - новая функция (MINOR)
12.1.5 - исправление бага (PATCH)
13.0.0 - новый App Router (MAJOR)
13.1.0 - улучшения (MINOR)

Как читать версии

1.2.3-beta.4+build.20210101
      ↑        ↑
   prerelease  metadata

Prerelease (пред-версия)

1.0.0-alpha     - ранняя версия, возможны ломающие изменения
1.0.0-beta.1    - версия для тестирования
1.0.0-rc.1      - Release Candidate, почти готово
1.0.0           - финальная версия

Metadata (метаданные)

1.0.0+build.1234567  - информация о сборке
1.0.0+20210101       - дата компиляции

Когда менять версию

Менять PATCH:

  • Исправление бага в функции
  • Улучшение производительности
  • Обновление документации

Менять MINOR:

  • Новая опция в функции
  • Новая функция в библиотеке
  • Улучшение без ломания API

Менять MAJOR:

  • Удаление функции
  • Изменение API сигнатуры
  • Значительный рефакторинг
  • Переписание внутренних алгоритмов

Вывод

Семантическое версионирование - это соглашение, которое:

  1. Информирует разработчиков о типе изменений
  2. Облегчает выбор версии для обновления
  3. Предотвращает ломающие обновления
  4. Стандартизирует версионирование в экосистеме

Практически все современные JavaScript библиотеки используют SemVer: React, Vue, Angular, webpack, Babel и тысячи других пакетов в npm.

Что такое семантическое версионирование? | PrepBro