pakage.json 中對(duì)引入依賴包版本進(jìn)行管理時(shí),dependencies中常??梢钥吹筋愃?^1.2.0 或 ~1.2.0 這樣的版本范圍指示。那么,這里的 ^ 和 ~ 具體表示什么含義呢。
詳細(xì)內(nèi)容可以查看npm的官方文檔
上面的鏈接中高級(jí)范圍語法一節(jié),表示版本范圍可以用的符號(hào)有 - x ~ ^
這里簡單把 ^ 和 ~ 的區(qū)別摘抄一下,備忘。
一個(gè)完整的版本號(hào)組表示為: [主要版本號(hào),次要版本號(hào),補(bǔ)丁版本號(hào)]
1. 用 ~ 指示范圍
如果指定了次要版本,允許補(bǔ)丁版本升級(jí)。如果沒有指定次要版本,允許次要版本升級(jí)。
| 能夠接受的版本范圍 | 說明 | |
|---|---|---|
| ~1.2.3 | 1.2.3 <= version < 1.3.0 | |
| ~1.2 | 1.2.0 <= version < 1.3.0 | |
| ~1 | 1.0.0 <= version < 2.0.0 | |
| ~0.2.3 | 0.2.3 <= version < 0.3.0 | |
| ~0.2 | 0.2.0 <= version < 0.3.0 | |
| ~0 | 0.0.0 <= version < 1.0.0 | |
| ~1.2.3-beta.2 | 1.2.3-beta.2 <= version < 1.3.0 | 1.2.3版允許高于beta.2的beta版,但1.2.4-beta.2不被允許,因?yàn)槭菍儆诹硪粋€(gè)版本號(hào)組的beta版本。 |
2. 用 ^ 指定范圍
允許不會(huì)改變最左邊的不為零的版本號(hào)的版本提升,也就是說,1.0.0允許次要、補(bǔ)丁版本升級(jí),0.1.0允許補(bǔ)丁版本升級(jí),^0.0.x 不允許升級(jí)。
有許多開發(fā)者把 '0.x' 中的 'x' 改變作為重大改變的指示。
一個(gè)普遍的做法是,^ 適合使用在當(dāng)開發(fā)者從 0.2.4 升級(jí)到 0.3.0 可能會(huì)做出不兼容的改變時(shí)。一般情況下,假定了在0.2.4 到 0.2.5 不會(huì)有不兼容改變,可以有一些新增(但不改變兼容)的改變。
| 能夠接受的版本范圍 | 說明 | |
|---|---|---|
| ^1.2.3 | 1.2.3 <= version < 2.0.0 | |
| ^0.2.3 | 0.2.3 <= version < 0.3.0 | |
| ^0.0.3 | 0.0.3 <= version < 0.0.4 | |
| ^1.2.3-beta.2 | 1.2.3-beta.2 <= version < 2.0.0 | 允許1.2.3 版的高于beta-2 的beta版本 |
| ^0.0.3-beta.2 | 0.0.3-beta.2 <= version < 0.0.4 | 只允許0.0.3 版的高于beta-2 的版本 |
當(dāng)解析帶有^的版本范圍時(shí),補(bǔ)丁版本號(hào)缺少會(huì)補(bǔ) 0,但是會(huì)靈活的處理,即時(shí)主要、次要版本號(hào)都為 0 也可以。
| 能夠接受的版本范圍 | |
|---|---|
| ^1.2.x | 1.2.0 <= version < 2.0.0 |
| ^0.0.x | 0.0.0 <= version < 0.1.0 |
| ^0.0 | 0.0.0 <= version < 0.1.0 |
當(dāng)次要、補(bǔ)丁版本號(hào)缺少時(shí)會(huì)當(dāng)作 0,但也會(huì)靈活處理,即時(shí)主版本號(hào)為 0 也可以 。
| 能夠接受的版本范圍 | |
|---|---|
| ^1.x | 1.0.0 <= version < 2.0.0 |
| ^0.x | 0.0.0 <= version < 1.0.0 |