最近Github 10週年在朋友圈裏沸沸揚揚刷屏,小編在工做中卻驚訝的發現很多同事對版本號中的beta和rc沒有概念,使用npm install package@next時,也不清楚next表明的含義。因而,決定寫一篇文章科普一下由 Github 起草的Semver(語義化版本)的相關知識。前端
首先,咱們來看看目前最流行的前端框架之一的React最近5個月的版本發佈日誌,截圖來自npmjs.com:react
從上圖,咱們不可貴出幾個結論:git
能夠說,React 發佈版本時作的至關到位,版本給人的感受很是清晰,也很嚴謹。這得益於 Semver(語義化版本) 規範的功勞。那麼,Semver是在什麼場景下出現的呢?它的出現又解決了什麼問題?這裏要和你們科普下「依賴地獄」的概念。github
通俗而言,「依賴地獄」指開發者安裝某個軟件包時,發現這個軟件包裏又依賴不一樣特定版本的其它軟件包。隨着系統功能愈來愈複雜,依賴的軟件包愈來愈多,依賴關係也愈來愈深,這個時候可能面臨版本控制被鎖死的風險。npm
所以,Github 起草了一個具備指導意義的,統一的版本號表示規則,稱爲 Semantic Versioning(語義化版本表示)。該規則規定了版本號如何表示,如何增長,如何進行比較,不一樣的版本號意味着什麼。json
官網:semver.org/ 中文版:semver.org/lang/zh-CN/bash
下面是聽從了Semver規範的React依賴圖,截圖來自npm.broofa.com: 前端框架
能夠看出,聽從了Semver規範的包依賴很是清晰,沒有出現循環依賴、依賴衝突等常見問題。markdown
版本格式:主版本號.次版本號.修訂號,版本號遞增規則以下:框架
先行版本號及版本編譯信息能夠加到「主版本號.次版本號.修訂號」的後面,做爲延伸。
當要發佈大版本或者核心的Feature時,可是又不能保證這個版本的功能 100% 正常。這個時候就須要經過發佈先行版本。比較常見的先行版本包括:內測版、灰度版本了和RC版本。Semver規範中使用alpha、beta、rc(之前叫作gama)來修飾即將要發佈的版本。它們的含義是:
好比: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後須要帶上次數信息。
列舉出比較實用的一些規則:
當執行npm install package -S 來安裝三方包時,npm 會首先安裝包的最新版本,而後將包名及版本號寫入到 package.json 文件中。
好比,經過npm 安裝 react 時:
{ "dependencies": { "react": "~16.2.0" } } 複製代碼
項目對包的依賴可使用下面的 3 種方法來表示(假設當前版本號是 16.2.0):
一般咱們發佈一個包到npm倉庫時,咱們的作法是先修改 package.json 爲某個版本,而後執行 npm publish 命令。手動修改版本號的作法創建在你對Semver規範特別熟悉的基礎之上,不然可能會形成版本混亂。npm 考慮到了這點,它提供了相關的命令來讓咱們更好的聽從Semver規範:
當執行 npm publish 時,會首先將當前版本發佈到 npm registry,而後更新 dist-tags.latest 的值爲新版本。
當執行 npm publish --tag=next 時,會首先將當前版本發佈到 npm registry,而且更新 dist-tags.next 的值爲新版本。這裏的 next 能夠是任意有意義的命名(好比:v1.x、v2.x 等等)
OK,如今你應該知道 npm install package@next時next表明的含義了吧!
《IVWEB 技術週刊》 震撼上線了,關注公衆號:IVWEB社區,每週定時推送優質文章。