Node.js中LTS和Current的有啥區(qū)別?

2016 年 10 月 18 日唬渗,Node.js v6 LTS (Boron) 發(fā)布,這也是 Node.js 啟用 LTS 發(fā)布計(jì)劃以來奋渔,第一次同時(shí)迎來兩個(gè) active LTS(v4 與 v6)镊逝。這系列文章將講述 Node.js v6 LTS 帶來的一系列變化,本篇主要圍繞 LTS 展開嫉鲸。如果讀者還對(duì) Node.js LTS 的發(fā)布流程不了解撑蒜,可以先閱讀本篇,否則可以直接跳過閱讀下一篇關(guān)于 Node.js Core 的變動(dòng)。


Node.js LTS 計(jì)劃

Node.js core 在 Node.js 與 io.js 合并后座菠,為了保證發(fā)布穩(wěn)定有序狸眼,讓開發(fā)者能夠合理安排升級(jí),開始使用 LTS(Long Term Support)來規(guī)劃發(fā)布周期浴滴。第一個(gè) LTS 版本是 v4拓萌,發(fā)布于 2015 年 10 月。在這個(gè)規(guī)劃下升略,Node.js 的版本相當(dāng)于 master 分支在特定時(shí)間下經(jīng)過穩(wěn)定化處理的快照司志,時(shí)間到了就將 master 分支上穩(wěn)定的部分整合起來,發(fā)布新的版本降宅,因此 Node.js 的發(fā)布是 以時(shí)間的流逝為準(zhǔn)骂远,在保證兼容性靠攏的前提下跳版本 ,而不是以兼容性和新特性的多少為準(zhǔn)腰根,這也解釋了為什么 Node.js 的版本看上去跳得那么快(不是“啊激才,我們攢了這么多大招,可以發(fā)新版了额嘿!”而是“啊瘸恼,四月到了該發(fā)版了,我們把攢過的大招過一遍册养,看有什么夠穩(wěn)定能加進(jìn)去的东帅,雖然可能這些招不怎么大就是了……”)。值得一提的是球拦,目前的常青瀏覽器/主流 JavaScript 引擎/ECMAScript 標(biāo)準(zhǔn)/C++ 標(biāo)準(zhǔn)也是采用類似的原則靠闭,以時(shí)間跨度為基準(zhǔn),從主干上截取穩(wěn)定特性來進(jìn)行發(fā)布的坎炼。

每一個(gè) LTS 都會(huì)有一個(gè)代號(hào)愧膀,從元素周期表取元素名,按照字母表排序谣光,挑選出合適的檩淋。v4 的代號(hào)是 Argon(氬),v6 的代號(hào)是 Boron(硼)萄金。

Node.js 的版本命名規(guī)則遵循 語(yǔ)義化版本(Semantic Versioning)蟀悦,版本號(hào)分為三部分,第一個(gè)數(shù)字(semver-major)增加氧敢,表示有不兼容的改變日戈;第二個(gè)數(shù)字(semver-minor)增加,表示有保持兼容的新特性福稳;第三個(gè)數(shù)字(semver-patch)增加涎拉,表示有在保持兼容性與特性不變的前提下的改動(dòng)发笔,比如修復(fù)了 bug 或者改進(jìn)了文檔娜睛。這個(gè)命名規(guī)則有利也有弊力九,此處不贅述娜扇,但它的一些矛盾之處使得 Node.js 的命名有一些例外,比如安全更新即使會(huì)導(dǎo)致不兼容季俩,為了能夠更新到所有 major 版本钮糖,也依然是 semver-minor。

一個(gè) LTS 的一生

LTS current: 第一年的四月到十月

目前 Node.js 會(huì)在每年四月從 master 截取分支出來酌住,收集足夠穩(wěn)定的特性店归,發(fā)布一個(gè) major 的偶數(shù)版本(比如 v6.0.0),作為下一個(gè) LTS 的備選酪我。在當(dāng)年四月到十月這段 6 個(gè)月的期間消痛,這個(gè)偶數(shù)版本稱作“current”(比如 v6.0.0 "current")。在接受社區(qū)反饋后都哭,這個(gè)版本會(huì)修復(fù) bug秩伞,增加新特性,不斷改善欺矫,還可能刪掉一些兼容性影響太大的改進(jìn)纱新,此時(shí)這個(gè)版本的 minor 版本會(huì)不斷增加。開發(fā)者可以利用這段時(shí)間穆趴,用這個(gè)候選 LTS 版本在線下測(cè)試自己的應(yīng)用脸爱,并將兼容性問題與 bug 反饋給 Node.js 的開發(fā)者。

LTS active: 第一年的十月到第三年的四月

到了當(dāng)年十月未妹,這個(gè)偶數(shù)版本就會(huì)成為 LTS(比如 v6.9.0 "LTS")簿废,此時(shí)它也被稱為 "active LTS"。在此后 18 個(gè)月的 active 期間教寂,這個(gè)版本幾乎不會(huì)再有任何不兼容的變更捏鱼,除了安全相關(guān)的 OpenSSL 以外其他的依賴(比如 v8)也不會(huì)進(jìn)行大的更新。這段時(shí)間內(nèi)開發(fā)者可以將線上的 Node.js 升級(jí)到這個(gè)穩(wěn)定的 LTS 版本酪耕,并使用 Node.js 的新特性進(jìn)行迭代。

LTS maintenance: 第三年的四月到第四年的四月

經(jīng)過 18 個(gè)月的 active 時(shí)期后轨淌,在第三年的四月迂烁,這個(gè)版本將會(huì)迎來最后 12 個(gè)月的 maintenance 時(shí)期,這個(gè)時(shí)候它的更新只有安全更新和 bug 修復(fù)递鹉。由于 Node.js 每年十月出一個(gè) LTS盟步,因此在這個(gè)版本 active 時(shí)期的 2/3 的節(jié)點(diǎn),就會(huì)有一個(gè)新的 active LTS 誕生(目前就處于 v4 LTS 還剩下 6 個(gè)月的 active 時(shí)躏结,v6 LTS active 發(fā)布的時(shí)間點(diǎn))却盘。等到它的 active 時(shí)期結(jié)束時(shí),開發(fā)者已經(jīng)有 6 個(gè)月的時(shí)間過渡到下一個(gè) active LTS。即使開發(fā)者更新的進(jìn)度比較慢黄橘,也還有 12 個(gè)月的 maintenance 時(shí)間兆览,抓緊進(jìn)行升級(jí)。12 個(gè)月后塞关,這個(gè) LTS 將會(huì)結(jié)束它的壽命抬探,不再迎來任何更新。因此帆赢,每個(gè)偶數(shù)版本小压,都會(huì)有 3 年的壽命。

Node.js 應(yīng)用開發(fā)者怎么選擇椰于?

對(duì)于追求穩(wěn)定性的 Node.js 應(yīng)用開發(fā)者來說怠益,只需要每年十月一個(gè)版本成為 active LTS 的時(shí)候線上跟進(jìn)升級(jí)即可,也就是每 12 個(gè)月升一次 major 版本瘾婿,每次升級(jí)的版本還有 18 個(gè)月 + 12 個(gè)月的壽命溉痢,中間跟進(jìn) minor 和 patch 的時(shí)候不用太擔(dān)心兼容問題。目前的推薦是最好在一個(gè) active LTS 出來的 12 個(gè)月內(nèi)完成線上的升級(jí)(因?yàn)?12 個(gè)月后會(huì)出下一個(gè) active LTS)憋他。進(jìn)度落后的話孩饼,妥協(xié)到 18 個(gè)月,這個(gè) LTS 的 active 時(shí)期結(jié)束前也可以竹挡。再趕不上镀娶,起碼要在 30 個(gè)月內(nèi)這個(gè)版本結(jié)束壽命之前升級(jí)完,否則連安全更新也沒有了揪罕。

擔(dān)心直接升級(jí)遇到的兼容問題較多的話梯码,則可以在每年四月偶數(shù)版本新出來的時(shí)候,提前在線下進(jìn)行測(cè)試和升級(jí)準(zhǔn)備好啰,將問題反饋到社區(qū)(當(dāng)然如果沒空也不需要管這一步)轩娶,并不斷跟進(jìn),十月再升線上版本框往。這樣線上下都是 12 個(gè)月升一次 major鳄抒,只不過時(shí)間點(diǎn)不同。雖然線下需要跟進(jìn)的兼容性問題多了一些椰弊,但同時(shí)也可以通過反饋?zhàn)屪约旱募嫒菪孕枨蟊簧鐓^(qū)照顧到许溅。

熱衷于嘗試新特性,或者不在生產(chǎn)環(huán)境使用的實(shí)驗(yàn)性項(xiàng)目秉版,則可以嘗試每年十月發(fā)布的奇數(shù) major 版本贤重。每個(gè)奇數(shù)版本只會(huì)維護(hù) 8 個(gè)月,而且不會(huì)有 LTS 那樣的兼容性保證清焕,但Node.js 的開發(fā)者會(huì)利用這個(gè)版本為下一個(gè) LTS 做準(zhǔn)備并蝗,因此它會(huì)有更多大膽的嘗試祭犯,比如更頻繁的 v8 更新(意味著更多的 ECMAScript 新特性實(shí)現(xiàn)以及性能優(yōu)化)。

因此滚停,現(xiàn)在還在線上使用 v4.x 的開發(fā)者沃粗,已經(jīng)可以準(zhǔn)備升級(jí)到 v6.x 了。如果你的線上應(yīng)用還在使用 LTS 計(jì)劃啟用前發(fā)布的版本铐刘,如 v0.12.x陪每,也最好抓緊升級(jí)到 v4.x 或者以上,因?yàn)?2016 年 12 月之后 v0.12.x 將不會(huì)再有任何安全更新镰吵,更早的版本就更沒有了檩禾,主要是 OpenSSL 的漏洞將不會(huì)被修復(fù),這些應(yīng)用將會(huì)暴露在各種安全風(fēng)險(xiǎn)之下疤祭。一旦升級(jí)到 v4.x 或更高盼产,今后的升級(jí)將會(huì)相對(duì)容易許多,平時(shí)只要記得跟進(jìn) minor 或者 patch 即可勺馆,或者懶一點(diǎn)的只需要關(guān)注安全更新戏售。

這跟 Node.js 的源代碼是怎么對(duì)應(yīng)的?

首先草穆,Node.js 的 Github Repo 有一個(gè) master 分支灌灾,大部分的 commit 是通過 PR 提交到這個(gè)分支上的。根據(jù)這些 commit 是否改變了兼容性或者引入了新特性悲柱,它們會(huì)被打上 semver-major 或者 semver-minor 的標(biāo)簽锋喜。

在每年四月前需要準(zhǔn)備 LTS 的時(shí)候,Node.js 會(huì)從 master 分支截取一個(gè)新的分支出來豌鸡,假如這個(gè)是 v6嘿般,那么這個(gè)分支就叫 v6.x-staging 。之后與這個(gè) LTS 相關(guān)的修改/打算進(jìn)入這個(gè) LTS 的修改涯冠,比如 bug 修復(fù)等炉奴,還是提交 PR 到 master ,但需要加一個(gè) tag lts-watch-v6.x 蛇更。被合并到 master 之后瞻赶,這些變動(dòng)會(huì)被負(fù)責(zé)發(fā)布的人挑出來,合并到 v6.x-staging 械荷。當(dāng)?shù)搅怂脑碌哪骋惶旃菜#瑅6 的第一個(gè)版本可以發(fā)布的時(shí)候,負(fù)責(zé)發(fā)布的人會(huì)創(chuàng)建一個(gè) v6.x 分支吨瞎,從 v6.x-staging 再挑出變更合并進(jìn)來。從四月到十月穆咐,對(duì) v6 的所有修改颤诀,無論是 minor 或者 patch字旭,依然先提交 PR 到 master ,然后再被挑出來合到 v6.x-staging 崖叫,發(fā)版本時(shí)再進(jìn)入 v6.x 遗淳。這樣,master 總是保留著最新的變動(dòng)心傀。而其他版本相關(guān)的分支屈暗,都是從 master 上挑出適合發(fā)版本的 commit,混合出來的縮影脂男, v6.x-staging 保留著 v6.x LTS 相關(guān)的修改养叛, v6.x 保留每一次 v6 發(fā)布的版本。除了負(fù)責(zé)處理分支的人以外宰翅,其他開發(fā)者是不會(huì)動(dòng)這些版本相關(guān)的分支的弃甥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市汁讼,隨后出現(xiàn)的幾起案子淆攻,更是在濱河造成了極大的恐慌,老刑警劉巖嘿架,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓶珊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耸彪,警方通過查閱死者的電腦和手機(jī)伞芹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搜囱,“玉大人丑瞧,你說我怎么就攤上這事∈裰猓” “怎么了绊汹?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扮宠。 經(jīng)常有香客問我西乖,道長(zhǎng),這世上最難降的妖魔是什么坛增? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任获雕,我火速辦了婚禮,結(jié)果婚禮上收捣,老公的妹妹穿的比我還像新娘届案。我一直安慰自己,他們只是感情好罢艾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布楣颠。 她就那樣靜靜地躺著尽纽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪童漩。 梳的紋絲不亂的頭發(fā)上弄贿,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音矫膨,去河邊找鬼差凹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侧馅,可吹牛的內(nèi)容都是我干的危尿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼施禾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脚线!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弥搞,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤邮绿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后攀例,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體船逮,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年粤铭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挖胃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梆惯,死狀恐怖酱鸭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垛吗,我是刑警寧澤凹髓,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站怯屉,受9級(jí)特大地震影響蔚舀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锨络,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一赌躺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羡儿,春花似錦礼患、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咏瑟。三九已至拂到,卻和暖如春痪署,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兄旬。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工狼犯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人领铐。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓悯森,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绪撵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓢姻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355