So sánh, sắp xếp phiên bản semver và kiểm tra range npm

Kiểm tra range npm (^, ~, x, ||, gạch nối) kèm lý do, so sánh, sắp xếp, tăng phiên bản.

Ví dụ: ^1.2.3, ~1.4, >=2.0.0 <3, 1.2 - 2.3, 1.x || >=3.0.0-beta.1

Dán danh sách từ npm view <gói> versions, changelog hoặc các tag của bạn.

Mặc định tắt: bản pre-release chỉ khớp range có nhắc tới một pre-release cùng x.y.z.

Nghĩa là >=1.2.3 <2.0.0-0

Phiên bản cao nhất khớp: 1.9.9

Phiên bảnKhớpVì sao
1.2.3 cóqua >=1.2.3 <2.0.0-0
1.2.10 cóqua >=1.2.3 <2.0.0-0
1.3.0-beta.1 khônglà pre-release, và ^1.2.3 không nhắc tới pre-release nào của 1.3.0
1.9.9 cóqua >=1.2.3 <2.0.0-0
2.0.0-rc.1 khôngtrượt <2.0.0-0
2.0.0 khôngtrượt <2.0.0-0
v1.4.0 cóqua >=1.2.3 <2.0.0-0
1.02.0—không hợp lệ: số không được có số 0 ở đầu

Công cụ này làm gì

Bốn thẻ: Kiểm tra range đánh dấu từng phiên bản khớp hay không kèm lý do (qua hay trượt điều kiện nào, hoặc bị quy tắc pre-release của npm loại), cho biết range thật sự nghĩa là gì (^1.2.3 là >=1.2.3 <2.0.0-0) và phiên bản cao nhất khớp, đúng thứ npm install sẽ chọn. So sánh hai bản cho biết bản nào cao hơn và phần nào quyết định. Sắp xếp theo thứ tự SemVer. Tăng phiên bản cho kết quả của từng kiểu tăng của npm.

Thứ tự ưu tiên

So major, minor, patch theo số (1.10.0 cao hơn 1.9.0). Bản pre-release thấp hơn bản chính thức: 1.0.0-rc.1 < 1.0.0. Các định danh pre-release so từ trái sang phải, số so theo giá trị và thấp hơn chữ, nên beta.11 cao hơn beta.2. Phần build sau dấu + bị bỏ qua.

Range của npm

^1.2.3 cho phép mọi bản 1.x từ 1.2.3 trở lên; ^0.2.3 chỉ tới dưới 0.3.0. ~1.2.3 chỉ cho phép thay đổi patch. Mặc định ^1.2.3 không khớp 1.3.0-beta.1: pre-release chỉ khớp range có nhắc tới pre-release cùng major.minor.patch. Đọc thêm semver, caret và tilde, và kiểm tra package.json bằng công cụ định dạng JSON.

Câu hỏi thường gặp

^ và ~ trong package.json khác nhau thế nào?

^1.2.3 nhận mọi bản 1.x.x từ 1.2.3 trở lên; ~1.2.3 chỉ nhận 1.2.x từ 1.2.3 trở lên. Với bản 0.x, dấu ^ chặt hơn: ^0.2.3 dừng dưới 0.3.0.

Vì sao ^1.2.3 không khớp 1.3.0-beta.1?

npm loại pre-release trừ khi range nhắc tới pre-release cùng major.minor.patch. Dùng ^1.3.0-beta.0 hoặc --include-prerelease.

1.0.0-beta.11 có cao hơn 1.0.0-beta.2 không?

Có. Định danh số được so theo giá trị, nên 11 > 2.