Semantic Versioning — major, minor, patch versiyalash
Muammodan boshlaylik
Loyihangiz axios kutubxonasidan foydalanadi. npm update qildingiz — va ilova buzildi. Kutubxona 1.4 dan 1.5 ga yangilangan, lekin unda funksiya nomi o'zgargan.
Yoki teskarisi: siz kutubxona chiqarasiz va foydalanuvchilar so'raydi: "2.0 ga o'tish xavfsizmi? Nima buziladi?"
Versiya raqami ma'lumot berishi kerak: bu yangilanish xavfsizmi yoki kodni o'zgartirish kerakmi? Bu kelishuv — Semantic Versioning (SemVer).
Format: MAJOR.MINOR.PATCH
2 . 4 . 1
│ │ │
│ │ └── PATCH — xato tuzatishlar, moslik buzilmaydi
│ └──────── MINOR — yangi funksiyalar, moslik buzilmaydi
└────────────── MAJOR — buzuvchi o'zgarishlar
| Nima o'zgardi | Qaysi raqam | Misol |
|---|---|---|
| Xato tuzatildi, API o'zgarmadi | PATCH +1 | 2.4.1 → 2.4.2 |
| Yangi funksiya, eski kod ishlashda davom etadi | MINOR +1, PATCH = 0 | 2.4.2 → 2.5.0 |
| Eski kod buziladi (o'chirilgan funksiya, o'zgargan format) | MAJOR +1, qolganlari = 0 | 2.5.0 → 3.0.0 |
34-darsdagi Conventional Commits bilan to'g'ridan-to'g'ri bog'liq:
fix: → PATCH
feat: → MINOR
feat!: / BREAKING → MAJOR
"Buzuvchi o'zgarish" nima?
Foydalanuvchi o'z kodini o'zgartirmasdan yangilasa, nimadir ishlamay qoladi:
- ❌ Ommaviy funksiya, metod yoki endpoint o'chirildi yoki nomi o'zgardi
- ❌ Majburiy yangi parametr qo'shildi
- ❌ Javob formati o'zgardi (
name→ism) - ❌ Standart xatti-harakat o'zgardi
- ❌ Qo'llab-quvvatlanadigan minimal Node.js versiyasi oshirildi
Buzuvchi emas:
- ✅ Yangi ixtiyoriy parametr
- ✅ Yangi funksiya yoki endpoint
- ✅ Ichki refaktoring (tashqi API o'zgarmasa)
- ✅ Xato tuzatish (hatto kimdir xatoga tayangan bo'lsa ham — munozarali holat)
Maxsus holatlar
0.x.x — boshlang'ich rivojlanish
0.1.0, 0.2.0, 0.15.3
1.0.0 dan oldin — API barqaror emas, har qanday o'zgarish mumkin. Odatda 0.MINOR buzuvchi o'zgarishlar uchun ishlatiladi. 1.0.0 — "API barqaror, endi SemVer qoidalariga rioya qilamiz" degan va'da.
Pre-release
2.0.0-alpha.1 — erta, beqaror
2.0.0-beta.3 — funksiyalar tayyor, sinov
2.0.0-rc.1 — reliz nomzodi (release candidate)
2.0.0 — barqaror
Tartib: 2.0.0-alpha.1 < 2.0.0-beta.1 < 2.0.0-rc.1 < 2.0.0.
Build metama'lumot
1.4.2+build.567
1.4.2+20261106.a3f9c2b
+ dan keyingisi versiya tartibiga ta'sir qilmaydi.
npm dagi diapazonlar
package.json da bog'liqliklar SemVer diapazonlari bilan yoziladi:
{
"dependencies": {
"express": "^4.21.0",
"lodash": "~4.17.21",
"react": "19.0.0"
}
}
| Yozuv | Ruxsat etilgan | Ma'nosi |
|---|---|---|
^4.21.0 |
4.21.0 ≤ v < 5.0.0 |
MINOR va PATCH — "mos keladigan har qanday" (standart) |
~4.17.21 |
4.17.21 ≤ v < 4.18.0 |
Faqat PATCH |
4.21.0 |
Faqat shu | Aniq versiya |
* yoki latest |
Har qanday | ❌ Xavfli |
^ (caret) — SemVer ga ishonish: "MAJOR o'zgarmasa, buzilmaydi". npm install express avtomatik ^ qo'yadi.
[!INFO] SemVer — va'da, kafolat emas. Ba'zi muallif lar tasodifan MINOR relizda nimadir buzadi. Shuning uchun
package-lock.json(11-dars) repozitoriyda: u aniq o'rnatilgan versiyalarni qotiradi —npm cihar doim bir xil natija beradi. Yangilanishlar esa ongli ravishda:npm update→ testlar → commit.
Versiya qayerda yashaydi
- Kodda —
package.jsondagi"version",pyproject.toml,composer.json - Git da — teg:
v2.4.1(keyingi dars) - GitHub da — Release (41-dars)
- CHANGELOG.md da — nima o'zgargani
npm version patch # 2.4.1 → 2.4.2: package.json + commit + git teg
npm version minor # 2.4.2 → 2.5.0
npm version major # 2.5.0 → 3.0.0
npm version uchala ishni bitta buyruqda qiladi — package.json ni yangilaydi, commit qiladi va v2.4.2 tegini qo'yadi.
CHANGELOG namunasi
# Changelog
## [2.5.0] - 2026-11-06
### Added
- Mahsulotlarni kategoriya bo'yicha filtrlash (#87)
### Fixed
- Savatda manfiy miqdor kiritish taqiqlandi (#42)
## [2.4.1] - 2026-10-28
### Fixed
- Payme: summa yaxlitlash xatosi
Format: keepachangelog.com.
Veb-ilovalar uchun ham kerakmi?
Kutubxona va API lar uchun — majburiy: boshqalar sizning kodingizga bog'liq.
Oddiy veb-sayt uchun (foydalanuvchilar faqat brauzer orqali) — SemVer kamroq muhim; ko'p jamoalar CalVer (sana bo'yicha) yoki commit hash bilan ishlaydi:
2026.11.06 — CalVer
sha-a3f9c2b — Docker teglari (Docker kursi, 38-dars)
Lekin mobil ilovalar, ommaviy API lar, kutubxonalar, CLI vositalar — SemVer.
Nima uchun shunday?
Nima uchun uchta raqam — bitta o'suvchi son (v1, v2, v3...) yetarli emasmi?
Chunki bitta son faqat "yangiroq" ekanini aytadi — lekin qanchalik xavfli ekanini emas. Loyihangizda 200 ta bog'liqlik bor; har biri haftada yangilanadi. Har birini qo'lda o'qib, "bu meni buzadimi?" deb tekshirish — imkonsiz. SemVer bu savolga raqamning o'zida javob beradi: PATCH va MINOR — avtomatik va xavfsiz olish mumkin (^), MAJOR — to'xtab, o'qib, ongli qaror qilish kerak. Bu kelishuv tufayli npm, pip, Composer kabi butun ekotizimlar millionlab paketlarni bir-biriga bog'lab ishlay oladi. Versiya raqami — muallif va foydalanuvchi o'rtasidagi shartnoma.
Xulosa
Eslab qoling:
MAJOR.MINOR.PATCH— buzuvchi . yangi funksiya . tuzatishfix→ PATCH;feat→ MINOR;!/BREAKING CHANGE→ MAJOR- Buzuvchi — foydalanuvchi kodini o'zgartirishga majbur qiladigan har narsa
0.x— beqaror API;1.0.0— barqarorlik va'dasi- Pre-release:
-alpha.1,-beta.2,-rc.1 - npm:
^— MINOR+PATCH (standart),~— faqat PATCH package-lock.json— aniq versiyalar;npm version patch/minor/major- CHANGELOG.md — keepachangelog formati
Keyingi dars
36-dars: git tag — versiyalarni belgilash, lightweight va annotated tag