摘要:版本控制為了在軟件版本號中包含更多意義,反映代碼所做的修改,產(chǎn)生了語義化版本,軟件的使用者能從版本號中推測軟件做的修改。的版本號由三部分組成主版本號次版本號補(bǔ)丁版本號。安裝參考依賴的版本版本號管理策略使用管理項(xiàng)目版本號語義化版本
NPM 版本控制
為了在軟件版本號中包含更多意義,反映代碼所做的修改,產(chǎn)生了語義化版本,軟件的使用者能從版本號中推測軟件做的修改。npm 包使用語義化版控制,我們可安裝一定版本范圍的 npm 包,npm 會選擇和你指定的版本相匹配 的 (latest)最新版本安裝。
npm 的版本號由三部分組成:
主版本號、次版本號、補(bǔ)丁版本號。變更不同的版本號,代表不同的意義:
主版本號(major):軟件做了不兼容的變更(breaking change 重大變更);
次版本號(minor):添加功能或者廢棄功能,向下兼容;
補(bǔ)丁版本號(patch):bug 修復(fù),向下兼容。
有時候?yàn)榱吮磉_(dá)更加確切的版本,還會在版本號后面添加標(biāo)簽或者擴(kuò)展,來說明是預(yù)發(fā)布版本或者測試版本等。比如 3.2.3-beta-3。
常見的標(biāo)簽有 :
標(biāo)簽 | 意義 | 補(bǔ)充 |
---|---|---|
demo | demo版本 | 可能用于驗(yàn)證問題的版本 |
dev | 開發(fā)版 | 開發(fā)階段用的,bug 多,體積較大等特點(diǎn),功能不完善 |
alpha | α版本 | 用于內(nèi)部交流或者測試人員測試,bug較多 |
beta | 測試版(β版本) | 較α版本,有較大的改進(jìn),但是還是有bug |
gamma | (γ)伽馬版本 | 較α和β版本有很大的改進(jìn),與穩(wěn)定版相差無幾,用戶可使用 |
trial | 試用版本 | 本軟件通常都有時間限制,過期之后用戶如果希望繼續(xù)使用,一般得交納一定的費(fèi)用進(jìn)行注冊或購買。有些試用版軟件還在功能上做了一定的限制。 |
stable | 穩(wěn)定版 | |
csp | 內(nèi)容安全版本 | js庫常用 |
latest | 最新版本 | 不指定版本和標(biāo)簽,npm 默認(rèn)安最新版 |
更多關(guān)于標(biāo)簽的內(nèi)容
查看標(biāo)簽:
npm dist-tags ls
npm dist-tags ls vue
得到:
beta: 2.6.0-beta.3 csp: 1.0.28-csp latest: 2.6.10
安裝帶標(biāo)簽的版本
npm i@
npm i vue@beta # 安裝 2.6.0-beta.3版本號變更規(guī)則
版本號只升不降,不得在數(shù)字前加0,比如 2.01.2 不允許的;
0.y.z,處于開發(fā)階段的版本;
第一個正式版版本往往命名為 1.0.0;
先行版本必須在補(bǔ)丁版本之后添加,比如 2.3.7-0,0表示先行版本,和補(bǔ)丁版本用-分隔;
版本的比較依次比較主版本→次版本→補(bǔ)丁版本→先行版本,直到第一個能得出比較結(jié)果為止;
不小心把一個不兼容的改版當(dāng)成了次版本號發(fā)行了該怎么辦?一旦發(fā)現(xiàn)自己破壞了語義化版本控制的規(guī)范,就要修正這個問題,并發(fā)行一個新的次版本號來更正這個問題并且恢復(fù)向下兼容。即使是這種情況,也不能去修改已發(fā)行的版本。
NPM版本計算器
如何處理即將棄用的功能?棄用現(xiàn)存的功能是軟件開發(fā)中的家常便飯,也通常是向前發(fā)展所必須的。但當(dāng)你棄用公共API的一部分時,你應(yīng)該做兩件事:
(1)更新文檔以便使用者知道這個變化。
(2)發(fā)行不包含棄用功能的次版本。在新主版本中完全移除棄用功能前,至少應(yīng)有一個不包含棄用功能的次版本發(fā)布,以便使用者能夠平滑過渡到新的API。
如何更新版本號?不用手動修改 package.json。而是用如下命令:
npm version [| major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
newversion: 直接給一個版本號;
major: 主版本增加1;
premajor: 預(yù)備主版本,主版本增加1,增加先行版本號;
prelease: 預(yù)先發(fā)布版本,先行版本號增加1;
git 和 npm version 結(jié)合 手動更改版本號執(zhí)行 npm version
在 .git/hooks目錄內(nèi),新建post-commit,輸入以下內(nèi)容:
#!/bin/sh COMMIT_MSG="$(git log --pretty=format:"%s" -1 head)" echo "$COMMIT_MSG" | grep -q "^[0-9]" if [ $? -ne 0 ];then # 自動修改 patch echo $(npm version patch) fi
在執(zhí)行 git commit -m "message"后,會檢測message是否是版本號(y.x.z的形式),不是,則執(zhí)行 npm version patch更新補(bǔ)丁版本,打一個tag。
如果想自動修改次版本,post-commit 的內(nèi)容即可。
版本運(yùn)算符版本運(yùn)算符指定了一定范圍的版本。
主要有~、^、-、<、<=、>、>=、=版本運(yùn)算符。
~ + 只含主版本 --- 主版本相同;
~ + 含有次版本 --- 主版本和次版本號相同。
版本范圍 | 匹配版本 |
---|---|
~3 | 3.x 或者 3.0.0 <= v < 4.0.0 |
~3.1 | 3.1.x 或者 3.1.0 <= v <3.2.0 |
~3.1.2 | 3.1.2 < v < 3.2.0 |
指定的版本范圍含有預(yù)發(fā)布版本,只會匹配和完整版本號相同的預(yù)發(fā)布版本。
~3.1.3-beta.2 匹配 3.1.3-beat.3 不匹配 3.1.4-beat-2
npm i lodash@~3 # 安裝 3.10.1 npm i lodash@~3.9 # 安裝 3.9.3 npm i lodash@~3.9.1 # 安裝 3.9.3 npm i lodash@~3.8.0 # 安裝 3.8.0^ 版本號 --- 第一個非零 版本號相同
版本范圍 | 匹配版本 | 補(bǔ)充 |
---|---|---|
^3.1.5 | 3.1.5 <= v < 4.0.0 | |
^0.3.6 | 0.3.6 <= v < 0.4.0 | |
^0.0.2 | 0.0.2 <= v < 0.0.3 | |
^3.x.x | 3.0.0 <= v < 4.0.0 | 版本號缺少的位置,會被 0 填充 |
^4.2.x | 4.2.0 <= v < 4.3.0 |
npm 安裝包時,默認(rèn)使用 ^ 匹配版本。
安裝主版本號為 3 的最新版本:
npm i lodash@^3 # 安裝 3.10.1 npm i lodash@^3.9 # 安裝 3.10.1 npm i lodash@^3.8.0 # 安裝 3.10.1~ vs ^
版本范圍 | 含義 | 匹配的版本 | 說明 |
---|---|---|---|
~3.3.0 | 與3.3.0相似 | 3.3.0 <= v < 3.4.0 | 主版本和次版本相同 |
^3.3.0 | 與3.3.0兼容 | 3.3.0 <= v < 4 | 主版本相同 |
同一個版本號,^ 能匹配的范圍大些,更加激進(jìn)。
例子
npm i lodash@^3.3.0 # 安裝 3.10.1 npm i lodash@~3.3.0 # 安裝 3.3.1
~ 和 ≈ 差不多,可將 ~ 理解成相似,這樣就分辨和理解了,~指定的是相似版本。
^ 可理解成兼容版本。
版本范圍 | 匹配版本 | 補(bǔ)充 |
---|---|---|
2.0.0 - 3.2.7 | 2.0.0 <= v <= 3.2.7 | - 前后有空格 |
0.4 - 3 | 0.4.0 <= v <= 3.0.0 | 缺少的版本號,被 0 填充 |
npm i vue@"1 - 1.9" # 安裝 1.0.28版本號比較器
版本范圍 | 匹配版本 | 補(bǔ)充 |
---|---|---|
<2.2.0 | 小于2.2.0 的版本 | |
<=2.0.0 | 小于等于 2.0.0 的版本 | |
>4.2.0 | 大于4.2.0 的版本 | |
>=4.2.0 | 大于等于 4.2.0 的版本 | |
=4.3.0 | 等于 4.3.0 的版本 |
是轉(zhuǎn)義字符。
npm i lodash@<3.5 # 安裝 3.4.0 npm i lodash@<=3.5 # 安裝 3.5.0 npm i lodash@>3.5 # 安裝 4.17.11 npm i lodash@>=3.5 # 安裝 4.17.11 npm i vue@">1 <2.3" # 安裝 2.2.6分組 ||
以或者的關(guān)系連接兩個版本范圍,極少使用。
npm i vue@"^0.7 || ~2" # 安裝 2.6.10參考
依賴的版本
版本號管理策略&&使用npm管理項(xiàng)目版本號
語義化版本2.0
whats-the-difference-between-tilde-and-caret-in-package-json
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/109246.html
摘要:今天在此向大家推薦一種非常流行的版本號命名規(guī)則語義化版本。語義化版本約定修訂版本號代表在和之前接口不變的前提下修正了。就是專門用于語義化版本號檢查的庫,其也是語義化版本標(biāo)準(zhǔn)的制定者。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。 軟件的命運(yùn)就是不斷維護(hù)、更新、迭代,所以我們用版本號來區(qū)分一個軟件的不同時期和形態(tài),版本號的命名方式有各種各樣,有的以小數(shù)表示(幾點(diǎn)幾),有的以日期表示,有...
摘要:第一個主要的包管理器在被引用后不久就搭建起來了,并且迅速成為世界上最受歡迎的包管理器之一。簡介是一款新的包管理器,在取代客戶端和其他包管理器現(xiàn)有工作流的同時,又保留了對代理的兼容性。 在JavaScript社區(qū),工程師們分享了成百上千的代碼段,我們不用自己從頭編寫基礎(chǔ)組件、類庫或者框架。反過來,每段代碼又或許依賴于其它的代碼段,而這些依賴就是通過 package managers(包管...
摘要:為什么為什么不是為什么不是為什么不是為什么不是嚴(yán)格的指導(dǎo)原則有助于為版本號提供意義。此外,如果你有打破當(dāng)前的,這同樣表示你需要升級你的主版本號了。 前提 何為版本?版本即語義版本控制( Semantic version 后面簡稱為 SemVer )是一種版本控制系統(tǒng),在過去幾年中一直在不斷發(fā)展。 隨著每天都在構(gòu)建新的插件,插件,擴(kuò)展和庫,擁有通用的軟件開發(fā)項(xiàng)目版本化方法是一件好事,可以...
摘要:由于文件中版本號的特點(diǎn),下面三個版本號在安裝的時候代表不同的含義。安裝版本統(tǒng)一為了防止拉取到不同的版本,有一個鎖定文件記錄了被確切安裝上的模塊的版本號。 showImg(https://segmentfault.com/img/bVbs8Rg?w=1920&h=1080); 一位用不好包管理器的前端,是一個入門級前端,一個用不好webpack的前端,是一個初級前端 三個包管理器是可以一...
摘要:由于文件中版本號的特點(diǎn),下面三個版本號在安裝的時候代表不同的含義。安裝版本統(tǒng)一為了防止拉取到不同的版本,有一個鎖定文件記錄了被確切安裝上的模塊的版本號。 showImg(https://segmentfault.com/img/bVbs8Rg?w=1920&h=1080); 一位用不好包管理器的前端,是一個入門級前端,一個用不好webpack的前端,是一個初級前端 三個包管理器是可以一...
閱讀 3685·2021-11-25 09:43
閱讀 2645·2021-11-25 09:43
閱讀 3844·2021-11-24 09:38
閱讀 697·2021-11-18 10:02
閱讀 2237·2021-09-22 15:53
閱讀 2998·2019-08-30 15:44
閱讀 2774·2019-08-30 14:01
閱讀 2754·2019-08-29 15:15