Semver and tags version

Semver khái niệm không còn xa lạ gì với developer nó được viết tắt từ Semantic Versioning mô tả kỹ thuật versioning và các nguyên tắc liên quan Semver

Summary

Semver được đánh số với 3 thành phần chính MAJOR.MINOR.PATCH

  1. MAJOR version khi các api cũ thay đổi không còn tương thích
  2. MINOR version khi một số tính năng mới được thêm những vẫn đảm bảo tương thích các version cũ (backwards-compatible)
  3. PATCH version dành cho những bản vá lỗi fix bug nhỏ vẫn tương thích với các version cũ

Ngoài ra còn có thêm các nhãn thêm vào như rc, alpha, beta, và những bản build metadata có thể được coi là những extensions cho các format MAJOR.MINOR.PATCH

Introduction

Vậy semver có tác dụng gì. Với những developer thường xuyên xử dụng dependency chắc hẳn không còn xa lạ với dependency hell Khi hệ thống của các bạn đang càng ngày càng lớn dần lên các packages càng được xử dụng nhiều thì việc xung đột phiên bản là điều không thể tránh khỏi. Việc bảo trì và phát triển thêm cũng càng trở nên khó khăn hơn rất nhiều. Để giải quyết vấn đề này semver phiên bản 2.0.0 đã đưa ra 11 quy tắc. Các bạn có thể tham khảo tại Semantic Versioning Specification (SemVer)

Solutions

Để giải quyết vấn đề khi bị xung đột các packages các bạn cần phải nắm rõ được quy tắc của semver. Ngoài ra khi syntaxes để install các package chúng ta cũng cần chú ý

  • Dấu *
   X.* <=>  >= X.0.0 và < (X+1).0.0
   X.Y.* <=>  >= X.Y.0 và < X.(Y+1).0
  • Dấu -
X.Y.Z - X'.Y'.X' <=>  >= X.Y.Z và <= X'.Y'.Z'
X.Y.Z - X'.Y'  <=>  >= X.Y.Z và <= X'.Y'.*
  • Dấu ~
~X.Y.Z  <=>  >= X.Y.Z và < X.(Y+1).0
~X.Y  <=> X.Y.*
  • Dấu ^

Dấu ^ ở đây là toán tử khá đặc biệt. Nó cho phép cập nhật không làm thay đổi vị trí khác 0 cuối cùng tính từ bên trái sang phải. Hay nói cách khác cho phép cập nhật patch và minor từ v1.0.0 trở lên. Cập nhật patch từ 0.X >= 0.1.0 và không cập nhật cho version 0.0.X

^X.Y.Z
- X != 0  <=> >= X.Y.Z và < (X+1).0.0
- 0.Y.Z (Y!=0) <=> >= 0.Y.Z < 0.(Y+1).0
- 0.0.Z (Z!=0) <=>  Không đổi

Kết luận

Quy tắc semver rất quan trọng, khi dự án của các bạn lớn dần lên thì việc sử dụng semver sẽ rất cần thiết. Để tránh tình trạng bị xung đột giữa các packages các bạn cần phải sử dụng Syntax một cách hợp lý. Hi vọng bài viết sẽ phần nào mang lại cho các bạn kiến thức về semver và có giải pháp thoát ra khỏi dependency hell

Nguồn tham khảo :

http://semver.org/spec/v2.0.0.html https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4