ولی این سه تا عدد دقیقاً چی میگن؟
این سیستم اسمش Semantic Versioning یا SemVerـه و شکل کلیش اینه :
MAJOR.MINOR.PATCH
مثلاً:
3.7.2
یعنی:
3 → MAJOR
7 → MINOR
2 → PATCH
حالا قسمت جذابش اینجاست
MAJOR — تغییرات بزرگ و Breaking
وقتی نسخه Major تغییر میکنه، ممکنه چیزهایی که قبلاً توی پروژهات کار میکردن، دیگه کار نکنن.
مثلاً:
2.4.1 → 3.0.0
فرض کن قبلاً این API رو داشتی:
getUser(id)
ولی توی نسخه جدید تبدیل شده به:
getUser({ id })
کدت ممکنه بشکنه؛ چون API قبلی تغییر کرده.
پس:
Major = احتمال Breaking Change
MINOR — قابلیت جدید، بدون شکستن قبلیها
مثلاً:
3.7.2 → 3.8.0
یک قابلیت جدید اضافه شده، ولی قرار نیست قابلیتهای قبلی خراب بشن.
مثلاً:
getUser()
همچنان کار میکنه و فقط قابلیت جدیدی مثل:
getUsers()
اضافه شده.
پس:
Minor = Feature جدید + سازگاری با قبلی
PATCH — رفع باگ
مثلاً:
3.7.2 → 3.7.3
اینجا معمولاً قابلیت جدیدی اضافه نشده؛ فقط باگها و مشکلات نسخه قبلی برطرف شدن.
مثلاً:
نسخه قبلی:
calculateTotal()
گاهی مبلغ اشتباه برمیگردوند.
در نسخه جدید این باگ Fix شده.
پس:
Patch = Bug Fix
حالا یه مثال واقعیتر
فرض کن نسخه پکیجت اینه:
1.4.2
بعد:
1.4.3 → یک باگ Fix شده.
1.5.0 → یک قابلیت جدید اضافه شده.
2.0.0 → تغییر بزرگی اتفاق افتاده که ممکنه نیاز به تغییر کدت داشته باشه.
پس فقط با نگاه کردن به نسخه میتونی بفهمی تقریباً چه نوع تغییری اتفاق افتاده.
اما یه نکته مهم درباره npm
وقتی توی package.json مینویسی:
"react": "^19.0.0"
این ^ مهمه.
یا مثلاً:
"lodash": "~4.17.21"
این علامتها مشخص میکنن چه نسخههایی اجازه دارن نصب بشن.
به زبان ساده:
^ → معمولاً Minor و Patch را اجازه میدهد.
~ → معمولاً فقط Patch را اجازه میدهد.
مثلاً:
^1.4.2
1.4.3 ✅
1.5.0 ✅
1.9.9 ✅
2.0.0 ❌
و:
~1.4.2
1.4.3 ✅
1.4.9 ✅
1.5.0 ❌
1.4.2
│ │ │
│ │ └── PATCH → رفع باگ
│ └──── MINOR → قابلیت جدید
└────── MAJOR → تغییرات ناسازگار
━━━━━━━━━━━━
🌐 DVHOST.IR
📢 @dvhost_cloud