一直對 package.json 文件中的版本號處於一個清晰與模糊之間的界限
也知道這個版本號是遵循 semver的規則.
但是這個規則中是沒有比如 ^
和 ~
等標志的規定的. 所以具體到 package.json 中這些版本是什么意思呢?
我列舉了一下, 這其中的場景, 直接給出解釋. 不過在此之前, 需要簡單說一下, 詳細的可以參照我上邊說的 semver 的解釋.
版本號, 大體上分為 3 個部分 a.b.c-xyz
- a 為主版本號, 不過一般版本號
0
不作為正式版本發布, 並且版本之間不一定實現兼容 - b 為次版本號, 在此版本上有一些功能性的區分
- c 為修訂號, 可以進行比如一些bug上的修正
- xyz 的部分為一些更細節的標注等,不過這些有標注的版本號按照規定是低於正式的版本號的, 比如
1.1.1-beta
是低於1.1.1
的.
整體解釋
說一些經常讓人費解的
^
和&
^
表示與版本兼容, 兼容就很有意思, 什么叫兼容呢, 按照 semver 中第一個號碼之間我們認為是不兼容的, 即 1.0.0 與 2.0.0 是不一定兼容的. 但是存在一些場景,比如 1.1.0 兼容版本從最左邊的非0版本號算起, 即^1.1.0
表示>=1.1.0 <2.0.0
.^0.0.3
表示>=0.0.3 <0.0.4
~
表示約等於版本, 即 如果存在次版本號,則允許修訂號為更高版,否則允許次版本號為更高版。人話的意思就是說~1.2.0
存在 次版本號2
, 那么表示為>=1.2.0 <1.3.0
, 即修改修訂號;~1.0.0
只有最高版本號, 那么表示>=1.0.0 <2.0.0
, 即修改次版本號
^
表示兼容,(我們從最左側的非0版本號算起);~
表示約等於, 我們將"最右側"的版本號進行"約算"
下邊就列舉一些版本號的一些具體解釋
表達式 | 范圍 | 解釋 |
---|---|---|
1.2.3 | 1.2.3 | 精確匹配1.2.3版本 |
~1.2.3 | >=1.2.3 <1.3.0 | 將"最右側"的進行約等 |
~1.0.0 | >=1.0.0 <2.0.0 | |
^1.2.3 | >=1.2.3 <2.0.0 | 將最左側的非0以下的位數進行兼容 |
^0.0.3 | >=0.0.3 <0.0.4 |
其他的情況就比較好理解了.
X x *
表示通配
>= <= -
直接進行理解就可以了
附上一些參考鏈接:
semver
看看俺 – KanKanAn.com