Đã bao giờ bạn cập nhật một thư viện và làm hỏng cả dự án? Đó là vì bạn và người viết thư viện chưa có “ngôn ngữ chung”. Semantic Versioning (SemVer) chính là ngôn ngữ đó.
SemVer là một quy tắc đơn giản để đặt số phiên bản theo định dạng MAJOR.MINOR.PATCH
, giúp bạn biết rõ mức độ thay đổi trong mỗi bản cập nhật.
🧠 Giải mã MAJOR.MINOR.PATCH
📘 PATCH (1.0.x) - Sửa lỗi:
- Khi nào tăng?
Khi bạn vá một lỗi nhỏ mà không ảnh hưởng đến tính năng có sẵn.
- Mức độ an toàn?
Cập nhật thoải mái. Giống như sửa lỗi chính tả, hoàn toàn vô hại.
Ví dụ: Phiên bản
1.0.0
có lỗi đếm từ, bạn sửa nó và phát hành phiên bản1.0.1
.
📘 MINOR (1.x.0) - Thêm tính năng mới:
- Khi nào tăng?
Khi bạn thêm tính năng mới nhưng không làm hỏng các tính năng cũ (tương thích ngược).
- Mức độ an toàn?
Cập nhật an toàn. Ai không cần tính năng mới thì không bị ảnh hưởng.
Ví dụ: Từ
1.0.1
, bạn thêm hàmreverse()
mới để đảo ngược chuỗi và phát hành phiên bản1.1.0
. HàmcountWords()
cũ vẫn hoạt động bình thường.
📘 MAJOR (x.0.0) - Thay đổi phá vỡ (Breaking Change):
- Khi nào tăng?
Khi bạn thay đổi code khiến các phiên bản cũ không còn tương thích.
- Mức độ an toàn?
⚠️ CẢNH BÁO! Cập nhật phiên bản này sẽ yêu cầu bạn phải sửa lại code của mình.
Ví dụ: Bạn thay đổi hàm
countWords(String text)
thànhcountWords(String text, boolean caseSensitive)
. Tất cả code đang dùng hàm cũ sẽ lỗi. Phiên bản mới sẽ là2.0.0
.
🎯 Tóm lại:
- Tăng PATCH: Sửa lỗi.
- Tăng MINOR: Thêm tính năng mới (không phá vỡ).
- Tăng MAJOR: Thay đổi lớn (phá vỡ tương thích).
Dùng SemVer là một cách tôn trọng người dùng sản phẩm của bạn. Nó giúp mọi người tiết kiệm thời gian và tránh được những lỗi không đáng có.
Hãy bắt đầu với phiên bản 1.0.0 cho dự án tiếp theo của bạn nhé!
Bạn có thể đọc thêm tại Semantic Versioning chính thức