Chắc hẳn, khi bản tạo 1 Project NodeJS, bạn cần phải xác định xem là mình cần sử dụng những thư viện gì, phiên bản nào để phát triển dự án. Khi khai báo những phụ thuộc này, có nhiều cách để chúng ta định nghĩa 1 phiên bản cụ thể. Và trong Node, nó sử dụng văn bản ngữ nghĩa để xác định phiên bản của thư viện phụ thuộc.

node-version-numbering1

Giả sử dụng ta đang sử dụng ExpressJS trong dự án. Bạn có thể khai báo phiên bản phụ thuộc như 1 trong các cách dưới đây:

  • 4.8.5
  • >4.8.5
  • >=4.8.5
  • ~4.8.5

Ví dụ trong file  package.json  bạn đang định nghĩa phụ thuộc vào Express như sau:

{
  "name": "awesome-sauce",
  "main": "server.js",
  "dependencies": {
    "express": "^4.0.x" <-- nó có ý nghĩa gì ?!
  }
}

Vậy ở đây  ^4.0.x  có ý nghĩa là gì ?

Xác định chính xác 1 phiên bản cụ thể

Nếu ta cần chỉ định rõ Express cần sử dụng chính xác phiên bản  4.0.0  thì ta viết  v4.0.0  hoặc  =4.0.0  hoặc chỉ là số hiệu phiên bản  4.0.0  thì 1 trong 3 cách viết này là như nhau.

Xác định theo dải phiên bản

Có rất nhiều cách định nghĩa phụ thuộc phiên bản theo 1 dải. Vậy tại sao ta cần xác định phiên bản theo dải ?

Lý do chính nhất là nên sử dụng các bản cập nhật của thư viện, nhưng bạn cần phải chắc chắn rằng khi update lên phiên bản mới thì dự án vẫn hoạt động tốt. Do khi cập nhật lên phiên bản mới, những đoạn mã chúng ta đã lập trình trước đó không còn phù hợp với thư viện và dự án có thể bị ngỏm củ tỏi. Vậy nên ta phải thật hạn chế sử dụng khai báo phiên bản là  latest .

Như chúng ta đã thấy, khi nâng cấp ExpressJS từ phiên bản 3 lên phiên bản 4 thì nhiều ứng dùng mà ta đã viết ở phiên bản 3 không thể hoạt động được khi lên phiên bản 4. Do ExpressJS đã thay đổi rất rất nhiều thành phần và cú pháp sử dụng. Vậy nên khi ở phiên bản 3, bạn chỉ nên mong muốn cập nhật những bản update mới nhất của phiên bản này.

Sau đây là bảng ý nghĩa cho từng cách xác định phiên bản theo dải:

Version Number Giải thích
latest Lấy phiên bản mới nhất có thể. Không an toàn để sử dụng.
*, x Có thể là bất kỳ version nào mà có thể.
4, 4.*, 4.x, ~4,^4 Bất kì phiên bản nào của phiên bản 4. Sẽ lấy phiên bản mới nhất.
>4.8.5 Chọn bất kì phiên bản nào lớn hơn một phiên bản xác định. Cách xác định này có thể làm ứng dụng không hoạt động.
<4.8.5 Chọn bất kì phiên bản nào nhỏ hơn một phiên bản nhất định.
>=4.8.5 Bất kì phiên bản nào lớn hơn hoặc bằng một phiên bản xác định.
<=4.8.5 Bất kì phiên bản nào nhỏ hơn hoặc bằng phiên bản một phiên bản xác định.
4.8.3 – 4.8.5 Bất kì phiên bản nào trong phạm vi của nó. Nó tương đương với >=4.8.3 và <=4.8.5
~4.8.5 Bất kì phiên bản nào “tương thích với 4.8.5”. Điều này sẽ sử dụng phiên bản lớn hơn, nhưng sẽ nhỏ hơn 4.9.0.
~4.8 Bất kì phiên bản nào tương thích và bắt đầu bằng 4.8 và nhỏ hơn 5.0
^4.8.5 Bất kì phiên bản nào “tương thích với 4.8.5”. Điều này sẽ gọi phiên bản chính tiếp theo như 5.0.0. Có thể gây hỏng (broken) ứng dụng của bạn nếu có sự thay đổi lớn trong phiên bản chính.

Thực tế nào an toàn và phù hợp nhất

Mặc định và cũng như nhiều developer đang sử dụng cách định với kí hiệu là dẫu ngã ( ~ ). Bằng việc xác định Express sẽ cập nhật những phiên bản tương thích với  ~4.8.5 , thì bạn vẫn có thể gặp lỗi khi những phiên bản nhỏ thay đổi, nhưng nó không làm cho dự án của bạn chết mà vẫn đảm bảo dự án vẫn hoạt động được.

Kết luận

Hi vọng với nhưng thông tin trên thì các bạn đã phần nào hiểu được cách chúng ta định nghĩa những phụ thuộc vào thư viện của dự án, làm sao để có thể kiểm soát được những lỗi mà có thể làm hỏng dự án của chúng ta. Ngoài NPM ra, thì Grunt và Bower cũng sử dụng các kí hiệu phiên bản tương tự như trên.

Liên kết tham khảo: http://bit.ly/npm-version

Happy coding !!!

About The Author