一直對 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
