起初仿畸,我不太理解 版本 在程序開(kāi)發(fā)中起到怎樣的作用惶岭。直到上周末與一個(gè)朋友聊天時(shí)示损,他的開(kāi)發(fā)工具 Webstorm 突然罷工渗磅,需要激活,我將之前我的激活方式告訴了他检访,但他回應(yīng)激活失敗始鱼,詢問(wèn)之下才知,他的 Webstorm 使用的是 2016.1 版本脆贵,而我給他的激活方式適用 2017.2 版本医清,我問(wèn)他為什么不升級(jí)工具,他回答只要能用不就成了卖氨,干嘛要升級(jí)会烙?我一時(shí)語(yǔ)塞,不知該如何回答他筒捺“啬澹回過(guò)頭我細(xì)想了一下,覺(jué)得還是有必要升級(jí)的焙矛,本文主要介紹一下幾點(diǎn)葫盼。
- 為什么要升級(jí)?
- 版本升級(jí)規(guī)范村斟?
- 那么多程序贫导,那么多版本,如何記憶蟆盹?
一孩灯、為什么要升級(jí)?
1. 開(kāi)源社區(qū)與 Issue
之前做過(guò)一個(gè)項(xiàng)目逾滥,當(dāng)時(shí)使用 bootstrap-fileupload
組件處理文件上傳峰档,發(fā)現(xiàn)中文顯示總是亂碼。當(dāng)時(shí)腦子里有個(gè)思維定式:官方的東西怎么可能會(huì)出錯(cuò)呢寨昙,肯定是我自己哪里寫(xiě)的有問(wèn)題讥巡?去官方文檔將所有屬性都檢查了一遍,網(wǎng)上也搜了下問(wèn)題都沒(méi)能找到答案舔哪。最后在源碼里 debugger 一步步找問(wèn)題欢顷,發(fā)現(xiàn)是由于 windows 上記事本的編碼為 'ANSI',而 bootstrap-fileupload
設(shè)置中文編碼 'gbk' 二者并不匹配導(dǎo)致捉蚤,修改之后就恢復(fù)正常了抬驴。我想將這個(gè) Bug 提給官方人員炼七,但不知道怎么聯(lián)系他們,我甚至在搜索引擎里搜索 bootstrap-fileupload
的官方郵箱布持。(現(xiàn)在想想有點(diǎn)傻乎乎的)
今年 6 月份接觸 github豌拙,第一次感受到 開(kāi)源社區(qū) 的含義:dva 是一個(gè)基于 React 的前端框架,公司項(xiàng)目選型時(shí)決定用它题暖,技術(shù)總監(jiān)便給了我它的 github 地址 讓我去讀一讀它的文檔按傅。
在這里,我才曉得原來(lái) dva 的源碼竟然是觸手可及的胧卤,而不再是生硬的 dva.min.js 文件逞敷。如果發(fā)現(xiàn) Bug,可以去 Issue 庫(kù)里提問(wèn)灌侣,官方人員會(huì)驗(yàn)證之后并解決的推捐。在 Issue 庫(kù)里你不僅可以提出 Bug,還可以幫忙解決 Bug 然后將修改的內(nèi)容 Pull Request 給官方人員侧啼。Issue 庫(kù)還有個(gè)巨大的好處就是遇到問(wèn)題去里面找牛柒,基本上你遇到的問(wèn)題其它人都有遇到并解決過(guò),這效率比在百度搜索問(wèn)題準(zhǔn)確性不知高了多少倍痊乾。
現(xiàn)在皮壁,比如在 Bootstrap-fileupload@1.0.0 里發(fā)現(xiàn)了一個(gè) Bug,在開(kāi)源社區(qū)里給官方提了一個(gè) Issue哪审,官方修復(fù)后并發(fā)布了新版本 Bootstrap-fileupload@1.0.1蛾魄,只需要下載最新的版本即可愉快的使用,而不是去修改源碼湿滓。
注: 并不是所有項(xiàng)目都是開(kāi)源的滴须,開(kāi)源的項(xiàng)目也并不一定就把代碼放在 Github 上,我找了下 jquery 社區(qū)是在 Github 上的叽奥,Bootstrao-fileupload 好像并沒(méi)找到扔水。
2. 軟件需要持續(xù)升級(jí)
軟件的每一次升級(jí),或修復(fù)之前功能 Bug朝氓,或新增新的功能魔市,或在優(yōu)化了性能,讓程序跑的更快赵哲。啥待德?你還不想更新?當(dāng)別人的微信升級(jí)后可以同時(shí)發(fā)送多張照片枫夺,你沒(méi)升級(jí)的版本只能一張張地發(fā)送照片将宪。當(dāng)別人家的 Webstorm 更新之后啟動(dòng)只花了 5 s,你使用老的版本啟動(dòng)卻花了 10 s。你還有什么理由不更新涧偷。
程序或軟件并不是一次性的東西,開(kāi)發(fā)完成就放那不管不顧了毙死。這是個(gè)持續(xù)改進(jìn)燎潮,持續(xù)完善的過(guò)程。版本就是軟件更新的歷史節(jié)點(diǎn)扼倘。一個(gè)好的程序會(huì)指定良好的版本規(guī)則确封,定期發(fā)布新版本,做一些功能上的改進(jìn)再菊,并將做了哪些修改告訴明確的告知客戶爪喘。
二、版本升級(jí)規(guī)范纠拔?
對(duì)于客戶來(lái)說(shuō)秉剑,不需要關(guān)心軟件是怎么升級(jí)的,他們只關(guān)心軟件更新了哪些內(nèi)容稠诲,好不好用侦鹏。
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),我們制定版本號(hào)臀叙,有條不紊的定期升級(jí)略水。如果制作版本號(hào)的規(guī)則混亂,在管理版本的時(shí)候?qū)?huì)及其痛苦劝萤。所以渊涝,我們遵循著相關(guān)規(guī)范。
1. 版本號(hào)
在上圖中床嫌,可以看到 6.4.7 -> 6.4.8
跨释,這是將頭條@6.4.7 版本升級(jí)到 @6.4.8 版本。規(guī)定版本號(hào)由三部分組成厌处,按照順序分別為主版本號(hào).次級(jí)版本號(hào).修訂號(hào)
煤傍。
修訂號(hào)何時(shí)變化? 當(dāng)修復(fù)一兩個(gè) Bug嘱蛋,改動(dòng)很小時(shí)蚯姆,將修訂號(hào) +1;
次級(jí)版本號(hào)何時(shí)變化洒敏? 當(dāng)新增一些功能龄恋,如頭條新增一個(gè)欄目時(shí),將次級(jí)版本號(hào) +1凶伙,修訂號(hào)置 0郭毕,就變成了 6.5.0,此時(shí)的改動(dòng)不容忽視函荣,但也不是很大显押;
主版本號(hào)何時(shí)改變扳肛? 當(dāng)做了很大的改變,如:變動(dòng)了頭條欄目的布局乘碑,用戶再登錄進(jìn)去時(shí)操作體驗(yàn)完全改變時(shí)修改主版本號(hào)+1挖息,此時(shí)次級(jí)版本號(hào)和修訂號(hào)置0,變成了 7.0.0兽肤。
在開(kāi)發(fā)人員開(kāi)發(fā)一個(gè)新的程序時(shí)套腹,建議命名第一個(gè)版本號(hào)為 0.1.0
,以后按照規(guī)則依次遞增资铡,第一個(gè) 可用的發(fā)行版本 將主版本號(hào)升級(jí)為 1.0.0
电禀。
2. 版本階段
頭條新聞對(duì)于用戶來(lái)說(shuō)叫做軟件,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)叫做程序笤休,以下統(tǒng)稱程序尖飞。
光是看版本號(hào),可能對(duì)于程序處于什么狀態(tài)并不能完全掌握店雅,此時(shí)還需附帶版本階段相關(guān)英文單詞來(lái)附加說(shuō)明葫松,格式:版本號(hào)-版本階段英文單字
。
如看到 dva@1.3.0-beta
就知道 dva 的版本號(hào)為 1.3.0
底洗,當(dāng)前處于 公測(cè)階段腋么,本身還存在 Bug,給部分用戶體驗(yàn)亥揖,用戶提出 Bug 并全部修復(fù)完成后才能正式發(fā)布珊擂。
程序版本階段對(duì)應(yīng)英文如下,大家遵守規(guī)范费变,看到英文單詞就這個(gè)這個(gè)版本當(dāng)前處于什么階段摧扇。
alpha 內(nèi)測(cè)階段
:該階段主要實(shí)現(xiàn)程序功能,通常只在內(nèi)部開(kāi)發(fā)人員之間交流挚歧,該階段存在 Bug 較多扛稽,待完善。beta 公測(cè)階段
:該階段較 alpha 來(lái)說(shuō)修復(fù)不少 Bug滑负,但仍存在隱藏問(wèn)題在张。由于內(nèi)部人手有限,先發(fā)布該階段版本讓廣大發(fā)燒友用戶們先做體驗(yàn)矮慕,發(fā)現(xiàn)問(wèn)題帮匾,解決問(wèn)題,不斷完善痴鳄。比較熟悉的就如小米發(fā)燒友就會(huì)很積極的測(cè)試功能瘟斜。-
rc 候選階段
:該階段基本解決完 beta 階段的所有 Bug,算是比較完善的一個(gè)版本了,可以發(fā)布給所有用戶使用螺句。該階段與 release 階段相差無(wú)幾虽惭,那為什么不直接忽略此階段版本呢?我猜測(cè)應(yīng)該還是考慮一個(gè)穩(wěn)妥的問(wèn)題蛇尚。比如:固定 20 號(hào)發(fā)布一個(gè) release 版本芽唇,15 號(hào)的時(shí)候就已經(jīng)開(kāi)發(fā)完成并測(cè)試通過(guò)進(jìn)入 rc 候選階段,如果剩下五天不出叉子佣蓉,那么這個(gè) rc 版本就是后面的 release 版本,萬(wàn)一運(yùn)氣不好亲雪,又測(cè)出 Bug勇凭,那么就修改發(fā)布 rc2 版本作為新的候選版本。
release 正式發(fā)行版
:啦啦啦啦义辕,正式上線版本虾标,給廣大用戶使用,此時(shí)要是再有明顯 Bug 是及其影響用戶體驗(yàn)灌砖,損失用戶量的璧函,該階段可以算是完全體了。
當(dāng)然基显,對(duì)于用于來(lái)說(shuō)蘸吓,頻繁的更新版本也是一件很痛苦的事。比如我們使用 node撩幽,我們就是用戶库继,node 官方要是隔三差五就更新一次版本,我們?cè)陧?xiàng)目中也需要被迫更新 node 版本窜醉,這是難以忍受的宪萄。于是,node 推出里兩個(gè)版本階段可供選擇榨惰。
-
LTS(Long-Term Support)長(zhǎng)期支持版本
:該階段相當(dāng)于上面的 release 版本拜英,基本沒(méi)啥大 Bug,可供 node 開(kāi)發(fā)人員長(zhǎng)期使用琅催,大概 18 個(gè)月才會(huì)有一次大更新居凶,也就是說(shuō)安裝 LTS 版本之后就不會(huì)頻繁更新。 -
Current 當(dāng)前階段
:在LTS
階段藤抡,如果 node 再添加新的特性或者修復(fù) Bug 怎么辦排监?統(tǒng)統(tǒng)放到Current
階段里,該階段并不穩(wěn)定杰捂,api 經(jīng)常會(huì)變舆床,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),并不推薦使用。等到 18 個(gè)月會(huì)將該階段升級(jí)為LTS
穩(wěn)定階段挨队。
三谷暮、那么多程序,那么多版本盛垦,如何記憶湿弦?
在前端開(kāi)發(fā)中,使用的每個(gè)前端框架(Vue
or Angular
or React
or Dva
.....)腾夯、UI 框架都有自己的版本控制颊埃,如何去知道什么框架升級(jí)到什么版本有什么新的功能呢?
1. 開(kāi)源社區(qū)
市面上框架那么多蝶俱,你的項(xiàng)目肯定不是每種都用的吧班利,著重關(guān)注項(xiàng)目中使用到的程序版本問(wèn)題。如我的項(xiàng)目中使用 dva
榨呆、ant-design
罗标、roadhog
嗽上、微信小程序
锹杈,還有一些開(kāi)源項(xiàng)目
,這些項(xiàng)目并不會(huì)每天都有更新省店,官方勤快一點(diǎn)的每周固定更新一次竿拆,懶一點(diǎn)的半個(gè)月宙拉,一個(gè)月左右更新一次。所以我一般每周一去開(kāi)源社區(qū)逛一逛丙笋,看看最新動(dòng)態(tài)鼓黔,社區(qū)里會(huì)有更新日志,沒(méi)有日志的可以去 Issue 庫(kù)里看看又出現(xiàn)了什么新的問(wèn)題不见。
2. 開(kāi)源中國(guó)網(wǎng)站
開(kāi)源中國(guó)社區(qū)首頁(yè)有一個(gè)板塊專門(mén)介紹軟件更新資訊澳化,里面有更新的軟件版本,更新內(nèi)容稳吮,并且涉及面極廣缎谷。每天逛一逛再也不用擔(dān)心拉下什么重要更新事項(xiàng)了。