日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Semver(语义化版本号)扫盲

發(fā)布時(shí)間:2025/7/25 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Semver(语义化版本号)扫盲 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近Github 10周年在朋友圈里沸沸揚(yáng)揚(yáng)刷屏,小編在工作中卻驚訝的發(fā)現(xiàn)不少同事對(duì)版本號(hào)中的beta和rc沒有概念,使用npm install package@next時(shí),也不清楚next代表的含義。于是,決定寫一篇文章科普一下由 Github 起草的Semver(語(yǔ)義化版本)的相關(guān)知識(shí)。

實(shí)際案例

首先,我們來(lái)看看目前最流行的前端框架之一的React最近5個(gè)月的版本發(fā)布日志,截圖來(lái)自npmjs.com:

從上圖,我們不難得出幾個(gè)結(jié)論:

  • 軟件的版本通常由三位組成,形如:X.Y.Z
  • 版本是嚴(yán)格遞增的,此處是:16.2.0 -> 16.3.0 -> 16.3.1
  • 在發(fā)布重要版本時(shí),可以發(fā)布alpha, rc等先行版本
  • alpha和rc等修飾版本的關(guān)鍵字后面可以帶上次數(shù)和meta信息

可以說(shuō),React 發(fā)布版本時(shí)做的相當(dāng)?shù)轿?#xff0c;版本給人的感覺非常清晰,也很嚴(yán)謹(jǐn)。這得益于 Semver(語(yǔ)義化版本) 規(guī)范的功勞。那么,Semver是在什么場(chǎng)景下出現(xiàn)的呢?它的出現(xiàn)又解決了什么問題?這里要和大家科普下“依賴地獄”的概念。

依賴地獄

通俗而言,“依賴地獄”指開發(fā)者安裝某個(gè)軟件包時(shí),發(fā)現(xiàn)這個(gè)軟件包里又依賴不同特定版本的其它軟件包。隨著系統(tǒng)功能越來(lái)越復(fù)雜,依賴的軟件包越來(lái)越多,依賴關(guān)系也越來(lái)越深,這個(gè)時(shí)候可能面臨版本控制被鎖死的風(fēng)險(xiǎn)。

因此,Github 起草了一個(gè)具有指導(dǎo)意義的,統(tǒng)一的版本號(hào)表示規(guī)則,稱為 Semantic Versioning(語(yǔ)義化版本表示)。該規(guī)則規(guī)定了版本號(hào)如何表示,如何增加,如何進(jìn)行比較,不同的版本號(hào)意味著什么。

官網(wǎng):https://semver.org/ 中文版:https://semver.org/lang/zh-CN/

下面是遵從了Semver規(guī)范的React依賴圖,截圖來(lái)自npm.broofa.com:

可以看出,遵從了Semver規(guī)范的包依賴非常清晰,沒有出現(xiàn)循環(huán)依賴、依賴沖突等常見問題。

版本格式

版本格式:主版本號(hào).次版本號(hào).修訂號(hào),版本號(hào)遞增規(guī)則如下:

  • 主版本號(hào)(major):當(dāng)你做了不兼容的 API 修改,
  • 次版本號(hào)(minor):當(dāng)你做了向下兼容的功能性新增,可以理解為Feature版本,
  • 修訂號(hào)(patch):當(dāng)你做了向下兼容的問題修正,可以理解為Bug fix版本。

先行版本號(hào)及版本編譯信息可以加到“主版本號(hào).次版本號(hào).修訂號(hào)”的后面,作為延伸。

先行版本

當(dāng)要發(fā)布大版本或者核心的Feature時(shí),但是又不能保證這個(gè)版本的功能 100% 正常。這個(gè)時(shí)候就需要通過發(fā)布先行版本。比較常見的先行版本包括:內(nèi)測(cè)版、灰度版本了和RC版本。Semver規(guī)范中使用alpha、beta、rc(以前叫做gama)來(lái)修飾即將要發(fā)布的版本。它們的含義是:

  • alpha: 內(nèi)部版本
  • beta: 公測(cè)版本
  • rc: 即Release candiate,正式版本的候選版本

比如:1.0.0-alpha.0, 1.0.0-alpha.1, 1.0.0-beta.0, 1.0.0-rc.0, 1.0.p-rc.1 等版本。alpha, beta, rc后需要帶上次數(shù)信息。

版本發(fā)布準(zhǔn)則

列舉出比較實(shí)用的一些規(guī)則:

  • 標(biāo)準(zhǔn)的版本號(hào)必須采用XYZ的格式,并且X、Y 和 Z 為非負(fù)的整數(shù),禁止在數(shù)字前方補(bǔ)零,版本發(fā)布需要嚴(yán)格遞增。例如:1.9.1 -> 1.10.0 -> 1.11.0。
  • 某個(gè)軟件版本發(fā)行后,任何修改都必須以新版本發(fā)行。
  • 1.0.0 的版本號(hào)用于界定公共 API。當(dāng)你的軟件發(fā)布到了正式環(huán)境,或者有穩(wěn)定的API時(shí),就可以發(fā)布1.0.0版本了。
  • 版本的優(yōu)先層級(jí)指的是不同版本在排序時(shí)如何比較。判斷優(yōu)先層級(jí)時(shí),必須把版本依序拆分為主版本號(hào)、次版本號(hào)、修訂號(hào)及先行版本號(hào)后進(jìn)行比較。

npm包依賴

當(dāng)執(zhí)行npm install package -S 來(lái)安裝三方包時(shí),npm 會(huì)首先安裝包的最新版本,然后將包名及版本號(hào)寫入到 package.json 文件中。

比如,通過npm 安裝 react 時(shí):

{"dependencies": {"react": "~16.2.0"} }

項(xiàng)目對(duì)包的依賴可以使用下面的 3 種方法來(lái)表示(假設(shè)當(dāng)前版本號(hào)是 16.2.0):

  • 兼容模塊新發(fā)布的補(bǔ)丁版本:~16.2.0、16.2.x、16.2
  • 兼容模塊新發(fā)布的小版本、補(bǔ)丁版本:^16.2.0、16.x、16
  • 兼容模塊新發(fā)布的大版本、小版本、補(bǔ)丁版本:*、x

npm包發(fā)布

通常我們發(fā)布一個(gè)包到npm倉(cāng)庫(kù)時(shí),我們的做法是先修改 package.json 為某個(gè)版本,然后執(zhí)行 npm publish 命令。手動(dòng)修改版本號(hào)的做法建立在你對(duì)Semver規(guī)范特別熟悉的基礎(chǔ)之上,否則可能會(huì)造成版本混亂。npm 考慮到了這點(diǎn),它提供了相關(guān)的命令來(lái)讓我們更好的遵從Semver規(guī)范:

  • 升級(jí)補(bǔ)丁版本號(hào):npm version patch
  • 升級(jí)小版本號(hào):npm version minor
  • 升級(jí)大版本號(hào):npm version major

當(dāng)執(zhí)行 npm publish 時(shí),會(huì)首先將當(dāng)前版本發(fā)布到 npm registry,然后更新 dist-tags.latest 的值為新版本。

當(dāng)執(zhí)行 npm publish --tag=next 時(shí),會(huì)首先將當(dāng)前版本發(fā)布到 npm registry,并且更新 dist-tags.next 的值為新版本。這里的 next 可以是任意有意義的命名(比如:v1.x、v2.x 等等)

OK,現(xiàn)在你應(yīng)該知道 npm install package@next時(shí)next代表的含義了吧!

團(tuán)隊(duì)開源

騰訊IVWEB團(tuán)隊(duì)的工程化解決方案feflow已經(jīng)開源

  • Github主頁(yè):https://github.com/feflow/feflow
  • 官網(wǎng):http://www.feflowjs.org/

如果對(duì)您的團(tuán)隊(duì)或者項(xiàng)目有幫助,請(qǐng)給個(gè)Star支持一下哈~

總結(jié)

以上是生活随笔為你收集整理的Semver(语义化版本号)扫盲的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。