我的 Node.js 十年 — 寫在 NodeParty 2022 之前


相識(shí)于微末
我是天豬,一個(gè)野生的程序猿,非科班出身,在非互聯(lián)網(wǎng)小公司待了很多年。剛開始工作的時(shí)候,還沒有前端這個(gè)崗位,不過高三的時(shí)候就接觸過網(wǎng)頁(yè)三劍客,一見鐘情于 HTML/CSS/JS 的『所見即所得』,懵懵懂懂間經(jīng)歷過 JavaScript 停滯的那幾年,也被 GMail 引領(lǐng)的翻身之戰(zhàn)驚艷過,重新認(rèn)識(shí)了前端。

JavaScript 一開始只能在瀏覽器這個(gè)容器中運(yùn)行,2009 年 Ryan Dah 在研究 V8 引擎時(shí)突發(fā)奇想,JavaScript 本身就是單線程的,而且瀏覽器發(fā)起的 AJAX 請(qǐng)求就是非阻塞的,如果將 JavaScript 和異步 IO 以及一個(gè)簡(jiǎn)單的 HTTP 服務(wù)器集合在一起,就會(huì)變成一個(gè)很酷的東西。于是在同年 05 月 01 日,Ryan Dah 在與 Tim Becker 的郵件討論中正式把它命名為 node,同月 27 日發(fā)布第一個(gè)版本,隨即在 11 月的 JSConf EU 上正式對(duì)外發(fā)布。
2011 年,正在沉浸于用 ExtJS 和 Flash 為電信 ERP 系統(tǒng)打工的我,時(shí)不時(shí)會(huì)寫一些小工具來幫自己偷懶,但一直沒找到合適的工具,茍且于 Groovy 和 Swing。有一天無意間刷 OSChina 資訊時(shí)看到 Node.js 的新聞,當(dāng)時(shí)的第一反應(yīng)是:『又一個(gè) jQuery 輪子?切~~』,幸運(yùn)的是基于『多少看一下反正不要錢,閑著也是閑著』的想法,點(diǎn)擊了進(jìn)去,于是發(fā)現(xiàn)了一個(gè)新的世界,真香~
記得當(dāng)時(shí)微信公眾平臺(tái)剛出來,我的第一個(gè)練手項(xiàng)目就是 node-webot,也是第一次參與開源。
刀耕火種
2013 年,入職了 UC。此時(shí)的業(yè)界,已經(jīng)有了前端崗位,歸屬于設(shè)計(jì)部門,也叫重構(gòu)工程師。前端開始進(jìn)入富應(yīng)用時(shí)代,但還非常的刀耕火種。
2014 年,在 UC 遇到了 云龍,有幸和他一起探索 UC 的前端工程化,基于 FIS 之上實(shí)現(xiàn)了 Scrat,那是一段很快樂的時(shí)光。FIS 的實(shí)現(xiàn)本身雖然比較粗糙,是基于正則表達(dá)式而不是 AST 的,但它的工程化思維卻非常的前沿。
現(xiàn)在很多人聊起 Node.js,第一印象可能是:『一個(gè)自不量力的想搶 Java 飯碗的語(yǔ)言』,但其實(shí)?命令行工具 才是 Node.js 最初落地及最大的應(yīng)用場(chǎng)景,它給前端領(lǐng)域帶來了巨大的變革:Grunt 的出現(xiàn)讓前端有了自己的構(gòu)建工具,Babel 的出現(xiàn)讓我們停滯已久的標(biāo)準(zhǔn)化重?zé)ㄉ鷻C(jī),Webpack 的出現(xiàn)讓前端工程化有了基石,前端基建進(jìn)入新石器時(shí)代。

參考閱讀:《前端工具鏈?zhǔn)瓯P點(diǎn)》,https://zhuanlan.zhihu.com/p/462985064
全棧工程師
2014 年,隨著 UC 被阿里收購(gòu),我被動(dòng)的完成了畢業(yè)時(shí)的目標(biāo)之一。同年 6 月 21 日的 JSConf CN 大會(huì)上,赫門 分享了 《淘寶前后端分離實(shí)踐》,吹響了國(guó)內(nèi)前端?前后端分層?的號(hào)角,BFF 的基石也正是 Node.js 這一武器。
2015 年 11 月 13 日,在 蘇千 的號(hào)召下,成立了 Node.js 虛擬工作組,聚集了來自螞蟻、淘寶、ICBC、UC 等等 BU 的接口人進(jìn)行共建,我作為 UC 的代表來到了杭州,核心成員閉關(guān)一周,產(chǎn)出了 EggJS,寓意是希望幫助各團(tuán)隊(duì)架構(gòu)師孕育出適合團(tuán)隊(duì)業(yè)務(wù)場(chǎng)景的上層框架。隨著它的完善,Node.js 生態(tài)有了三駕馬車( EggJS 框架、TNPM 包管理、AliNode 性能分析)的護(hù)航。

在移動(dòng)互聯(lián)網(wǎng)的浪巔下,前端肆意地探索著自己的邊界,從 PC 到 H5,從 WebView 到 APP,從 Browser 到 Server,這是屬于前端的大航海時(shí)代,一時(shí)間人人都是全棧工程師。
這是一個(gè)全棧爆發(fā)的時(shí)代,這是一個(gè)活力四射的時(shí)代。我們沖鋒陷陣有了不少突破,我們也留下了很多歷史債。
靜水深流
2019 年初,我加入了螞蟻體驗(yàn)技術(shù)部,來到了那個(gè) EggJS、CNPM 誕生的地方,成為了一名前端基礎(chǔ)技術(shù)人,專注于 Node.js 基礎(chǔ)設(shè)施的建設(shè)。
真正投入到基礎(chǔ)設(shè)施后,你會(huì)發(fā)現(xiàn)后端的領(lǐng)域非常廣闊,要讓一個(gè)新生的基礎(chǔ)設(shè)施完善以及得到認(rèn)可,需要一代代人的努力和沉淀。
我們實(shí)現(xiàn)了各種后端服務(wù)的 SDK,因?yàn)樵谀莻€(gè)年代跨語(yǔ)言支持友好性不像今天這樣是一個(gè)共識(shí)。
我們實(shí)現(xiàn)了 EggJS 框架、TNPM 包管理、AliNode 性能分析 三駕馬車來為業(yè)務(wù)開發(fā)護(hù)航。
我們實(shí)現(xiàn)了自己的研發(fā)平臺(tái),收斂研發(fā)模式,對(duì)接下游 PaaS 等基礎(chǔ)設(shè)施。
我們?cè)谡Z(yǔ)雀、云鳳蝶、雨燕等場(chǎng)景都大規(guī)模的深度使用了 Node.js。
近年來,我們進(jìn)入了平臺(tái)治理期,我們變得更耐心和更克制,圍繞著前端核心場(chǎng)景去深入,不會(huì)把 Node.js 作為錘子去找釘子。
我們不再追求人人都是全棧工程師,前端領(lǐng)域目前已經(jīng)足夠廣大,術(shù)業(yè)有專攻,我們的目標(biāo)是把部分前端培養(yǎng)成全棧,成為前端新基建的護(hù)航者,讓一線前端可以無感的沒有額外負(fù)擔(dān)的享受到這些能力,從而給業(yè)務(wù)帶來創(chuàng)新。
我們不再追求全民 BFF 化,而是會(huì)幫助業(yè)務(wù)一起分析架構(gòu)選型,協(xié)建上層業(yè)務(wù)平臺(tái)的方式來提升效能和 ROI。我們重新審視原來的基礎(chǔ)設(shè)施,結(jié)合最新的前端實(shí)踐進(jìn)行更極致的翻新,如過去一年在 CNPM Rapid 等方面的實(shí)踐。
Any application that can be written in JavaScript, will eventually be written in JavaScript.?
-- Jeff Atwood(任何可以用 JavaScript 來寫的應(yīng)用,最終都將用 JavaScript 來寫。)
這段話曾經(jīng)在前端圈很流行,我個(gè)人覺得它既對(duì),也不對(duì)。在那個(gè)時(shí)代,Node.js 這個(gè)少年處于野蠻生長(zhǎng)時(shí)代,年輕人總需要去證明一點(diǎn)什么,證明這世界上沒有什么是不可能的,一切皆有可能。但成長(zhǎng)后的少年,已經(jīng)不需要去為了證明什么而去做些什么,而是需要聚焦回核心航道上的事,不用分心在可以做但沒必要做的事上。
"The strength of JavaScript is that you can do anything. The weakness is that you will."?
-- Reg Braithwaite (JavaScript 的優(yōu)點(diǎn)是可以寫任何東西,缺點(diǎn)是你真的會(huì)用它去寫這些東西。)
這句話,我認(rèn)為是對(duì)上一段話的回應(yīng),或者說下聯(lián),我們需要正確且理智的看待手中的武器,并使用在合適的場(chǎng)景。
NodeParty 2022
不知不覺,Node.js 已經(jīng)陪伴了我十年,在工作中一直在深度實(shí)踐,在社區(qū)也一直在做 Node.js 的科普工作。但我一直不覺得自己是 Node.js 布道師,我也不覺得 Node.js 是萬能的,不覺得它能拳打腳踢 Java 等語(yǔ)言,每個(gè)團(tuán)隊(duì)的起點(diǎn)、技術(shù)背景、基礎(chǔ)設(shè)施都不一樣,不能一概而論。
我堅(jiān)信它對(duì)前端領(lǐng)域的價(jià)值,是一個(gè)不可或缺的基礎(chǔ)設(shè)施,或許未來前端的變革使得一切工程問題從根本上得到解決,但不管怎樣,我只是希望當(dāng)下能認(rèn)真記錄自己以及同行者們?cè)谶@個(gè)領(lǐng)域的所見所想,與正在經(jīng)歷前端工業(yè)化演進(jìn)并被此過程困擾的同學(xué)交流心得,讓大家有所參考從而邁出自己的路。
經(jīng)歷過前端大航海時(shí)代的同學(xué),一定還記得當(dāng)年 JSConf CN、NodeParty、前端圈等各種大會(huì),那真是一個(gè)令人懷念的純真的技術(shù)年代啊。近幾年來,各種大會(huì)少了不少,也有人會(huì)吐槽沒啥干貨,其實(shí)不必糾結(jié),因?yàn)榍岸艘呀?jīng)到了一個(gè)平臺(tái)期了,它涉獵的范圍太廣了,自然會(huì)顯得有點(diǎn)平淡,其實(shí)不盡然,我們一直都在前行著。
去年底 蘇千 找我說,辦個(gè) NodeParty 吧,我一開始有點(diǎn)疑慮,因?yàn)槲覀冋谧龅暮芏喽际莾?nèi)部的治理工作,社區(qū)的同學(xué)不一定能理解和有所收獲。蘇千說:『沒關(guān)系的,我們既然一直在這條路上走著,我們有義務(wù)跟社區(qū)分享下我們的所思所得,讓大家知道,還有這么一群人一直在前行著』。

因此,今天誠(chéng)邀大家參與支付寶體驗(yàn)科技舉辦的 NodeParty 2022 線上直播,我們分享的內(nèi)容包括:
Node.js What's Next,來自?Node.js Contributor?的分享,介紹 ?Node.js 工作組正在推進(jìn)的戰(zhàn)略計(jì)劃,以及如何參與定義 ?Node.js 的未來。
基于 cnpmcore 實(shí)現(xiàn)企業(yè)級(jí)包管理服務(wù), 來聽一聽 cnpm registry 全新重構(gòu)的技術(shù)內(nèi)幕和架構(gòu)思考。
cnpm rapid 正式開源,上半年我們?cè)窒磉^的 『深入淺出 tnpm rapid 模式 - 如何比 pnpm 快 10 秒』,終于到 show me the code 環(huán)節(jié)了。
從 Egg 到 Artus,談?wù)効蚣艿目蚣艿某跣?,分享來自螞蟻、字節(jié)、蔚來團(tuán)隊(duì)的共建。
也許我們還沒完全準(zhǔn)備好,還在持續(xù)的完善中,但我們希望能讓社區(qū)的同學(xué)知道,我們一直都在前行,等你~?
