Ghi chép này giúp các bạn trả lời những câu hỏi tại sao lại có các dấu " ^ " dấu " ~ " trong file package.json của các bạn, từ đó sẽ có 1 cái nhìn sâu sắc hơn vì đã hiểu rõ ý nghĩa nhưng râu ria đầy nguy hiểm này.
$ npm update [tên_package]
Nhưng các bạn phải chú ý, việc update đến version nào còn phụ thuộc vào một điểm nữa mà mình chưa nhắc tới ở phần #giới thiệu về package version, đó là kí hiệu ở trước version.
Có 2 kí hiệu tiền tố phổ biến nhất đó là dấu ^ và dấu ~
Khi bạn cài đặt package thì mặc định tiền tố sẽ là dấu ^
"dependencies": {"react": "^16.17.0",}
Với tiền tố ^. Khi update, bạn sẽ được update đến bản minor mới nhất. ( chưa biết về bản minor là gì, bấm vào đây => #Package Version - minor )
Lấy ví dụ package ở trên, khi ta update package react sẽ được update tới version mới nhất dạng
16.x.x
trong đó16.0.0 <= 16.x.x < 17.0.0
Như có thể thấy, version mới nhất mà bạn có thể cập nhật được nếu sử dụng ^ là version 16.14.0, vì nó là bản minor mới nhất hiện có và thỏa mãn 16.0.0 < 16.14.0 < 17.0.0.
Tuy nhiên, nếu chúng ta thay đổi kí tự ^ thành ~ thì sẽ khác:
"dependencies": {"react": "~16.17.0",}
Khi chạy lệnh npm outdated sẽ cho ra kết quả:
Sử dụng kí tự ~ có nghĩa là khi update, bạn sẽ được update đến bản vá lỗi mới nhất. Trong ví dụ package ở trên, khi ta update package slugify, nó sẽ được update tới version với dạng
16.14.x
trong đó16.14.0 <= 16.14.x < 17.0.0
, vậy version mới nhất mà thỏa mãn điều kiện trên là version16.14.0
[version]
: giữ nguyên version hiện tại kể cả khi update
>[version]
: version sau khi update phải > version hiện tại
*[version]
: update đến version mới nhất không có ràng buộc gì.
>= [version]
: version sau khi update phải >= version hiện tại
…
Bạn có thể xem thêm tại đây:
https://docs.npmjs.com/files/package.json
Chú ý là sau khi update, kí hiệu tiền tố sẽ trở về mặc định đó là kí tự ^. Các bạn nên cân nhắc sử dụng kí tự tiền tố là ~ .