當我們開發完成一個npm包時,發布上線之前需要給它定義一個版本號,版本號采用X.Y.Z的格式,其中X、Y、Z為非負的整數,且禁止在數字前方補零。版本號只能增加,禁止下降,代碼的修改必須以新版本形式更新。
- X為主版本號(major):做了不兼容修改或顛覆式的重寫
- Y為次版本號(minor):向下兼容的功能性新增
- Z為修訂號(patch):向下兼容的問題修正
上述介紹的是標准版本,日常開發中我們應該都見到過這樣的版本號"element-plus": "^1.1.0-beta.24"
,這樣的版本稱為“先行版本”。當某個版本改動比較大、並非穩定而且可能無法滿足預期的兼容性需求時,你可能要先發布一個先行版本。
先行版本號可以加到“主版本號.次版本號.修訂號”的后面,先加上一個連接號,再加上一連串以句點分隔的標識符和版本編譯信息。
- 內部版本(alpha)
- 公測版本(beta)
- 正式版本的候選版本rc:即Release candiate
我們經常可以看到package.json
中各種依賴版本號的不同寫法:
"dependencies": {
"signale": "1.4.0",
"react": "16.x",
"prettier": ">= 1.13.0",
"table": "~5.4.6",
"yargs": "^14.0.0",
"figlet": "*",
}
不加任何版本前綴的代表是固定版本,常見的版本前綴有:
- “ >=&&< ”:匹配大於等於或小於某個版本號的最新發布的版本。
- “ ~ ”:當安裝依賴時獲取到有新版本時,安裝到x.y.z中的z為最新版本。即保持主版本號、次版本號不變的情況下,保次修訂版本號為最新版本。“~5.4.6”它將匹配“5.4.x”。
- “ ^ ”:當安裝依賴時獲取到有新版本時,安裝到x.y.z中的y和z都為最新版本。即保持主版本號不變的情況下,保次次版本號、修訂版本號為最新版本(保持從左至右的第一個非零版)。“14.0.0”它將匹配“14.x.x”。“0.3.4”: 大於等於 0.3.4 且小於 0.4.0版本,"^0.0.6": 大於等於 0.0.6 且小於 0.0.7版本。
- “ * ”:當安裝依賴時獲取到有新版本時,安裝到x.y.z中的x、y、z均為最新版本。
注意:npm 在使用 --save 更新 package.json 時,默認使用前綴 ^。修改方法如下:
1、默認使用前綴~:npm config set save-prefix '~'
2、不使用前綴,保存確切版本 :npm config set save-exact true
由於不同環境、不同時間,導致安裝的依賴包版本不同是很容易發生的,不知道大家有沒有遇到過本地運行和線上運行表現不一致的情況,就極有可能是依賴安裝的版本不一致導致的,這個時候我們可以使用npm ls
命令查看項目安裝的依賴包的具體版本:
npm ls --depth 0 --prod
那怎么預防這種情況呢?
大家有沒有注意到,使用yarn安裝依賴的時候,根目錄下會自動生成一個yarn.lock
文件,該文件包含了當前項目中所安裝的依賴包的版本信息。其他人在使用yarn安裝項目的依賴包時就可以通過該文件創建一個完全相同的依賴環境。
在使用npm(版本需大於5.0.0)安裝依賴的時候,項目的根目錄下也會自動生成一個package-lock.json
的文件夾,作用與yarn.lock
相同,都是用來鎖定項目依賴具體的版本號的。
參考文章