2年過去了,有誰還記得曾想取代Node.js的他?

卡頌 發表於 2022-11-29
Node.js

大家好,我卡頌。

22年11月14日,Deno釋出了v1.28,距離他第一個穩定版本v1.0.0釋出(2020年5月13日)已過去2年。

作為Node.js的競爭者,Deno似乎並沒有達到取代前者的目標。

甚至,他在前端社群的聲量也越來越小。

那麼,這兩年Deno都經歷了什麼,未來他會取代Node.js麼?

歡迎加入人類高質量前端框架群,帶飛

與Node.js的不同

同為js執行時環境DenoNode有什麼不同呢?

拋開各種細枝末節,他們最大的不同在於 —— Deno開放放在很重的地位。

什麼平臺是最開放的呢?答案是web

所以,在Deno設計的方方面面都能看到web的影子。比如:

  • 原生支援很多web API(比如fetchURLSearchParamsWeb Workers...)
  • 全域性變數是與瀏覽器一樣的window物件
  • 原生支援瀏覽器標準的ESM規範

那麼,這些API標準開放有什麼關係呢?這裡講個小故事。

Deno的作者Ryan Dahl同時也是Node的作者。

在實現Node之初,他將工作重心放在事件驅動模型的實現上。這時,有個專案中引入的模組該如何解析的問題亟待解決。

他接受了NPM提出的package.json建議。簡單的說,Node中的require方法會去package.json中尋求如何解析模組(dependenciesdevDependencies等欄位)。

後來,NPM逐漸成為Node中最流行的包管理器與事實上的標準,兩者逐漸深度捆綁。

NPM是一傢俬人公司,且之後被Github收購。Github又在微軟旗下。

可以說,佔領導份額的Node第三方依賴管理是受私人大公司(微軟)控制的。

反觀Deno,原生採用ESM規範,最初有兩種模組引入方式:

  • 從本地路徑引入

比如:

import xxx from './a.ts';
  • 從遠端url引入

比如:

import * as utils from "https://deno.land/[email protected]/io/util.ts";

相比於Node中引入一個模組就等於引入一個npm包,Denourl的方式引入模組顯然是更開放的。

畢竟,web最不缺的就是url連結了。

Ryan的理想

從上面的故事也能看出,Ryan Dahl離開Node團隊,創立Deno是充滿了理想主義色彩的。

在為Deno預熱的JS ConfEU 2018中,他也明確表示:

Deno不會和Node相容,不這樣的話開發者最終實現的還是Node模組

2年過去了,有誰還記得曾想取代Node.js的他?

在最初的正式版本中,Deno也確實踐行了自己與Node不同的風格,針對Node眾多缺陷提出瞭解決方案,比如:

  • 針對Node的安全性問題,加強了原生API訪問檔案系統與網路的限制
  • 捨棄了package.json
  • 原生支援TS

這些特立獨行確實引起了開發者熱議,但並未達到很好的市場反響。

畢竟,Deno首個正式版釋出時,Node已經問世11年了。

Node問世時,Node團隊只需要持續、穩定的迭代Node核心API,就會有大量的JS開發者為Node生態貢獻優質第三方模組。

而在Deno面世時,又會有多少開發者願意為Deno貢獻第三方模組呢,用Node現成的包不香麼?

於是,Deno親自上陣,滿足了開發者的一些剛需,比如:

  • 開箱即用的工具鏈工具(linterformattertest-runnerbundle

再加上原生支援TS,可以說一個Deno初始專案就具備了一整套工程化最佳實踐。

對比同為Rust編寫的工具鏈工具Rome(迭代了2年,釋出了一個linter,一個formatter)就能發現,Deno的迭代速度可以說是非常快了。

  • 應用框架

比如受koa啟發的oak,以nobundle為賣點的全棧框架fresh

  • 釋出系統

Deno深度整合的Deno Deploy

這些努力似乎並沒有取得預期的效果,對比Deno(藍色)與Node(紅色)的Google趨勢

Node的趨勢整體走高,而Deno的走勢極為平坦(只在20年5月v1.0釋出時有一點起伏):

2年過去了,有誰還記得曾想取代Node.js的他?

現實

今年6月,Deno獲得由紅杉領投的2100w刀的A輪融資,用於發展Deno Deploy

資本為了獲得更好的回報,勢必需要更大的使用者基數。而Deno最大的潛在使用者群體,就是Node開發者了。

理想主義的Ryan不得不面對現實。

在最近的v1.28中,Deno宣佈已顯著提高對NPM包的相容性,現在開發者可以在Deno中使用超過130w個NPM包。

在這背後,Deno做了大量的Node.js適配工作(在Deno中實現Node原生API的適配層)。

曾經替代Node.js的目標,也逐漸變為成為更好的Node.js

這2年的經歷對Deno來說,就像一個初入職場的熱血大學生被社會磨平稜角的過程。

總結

  • Deno涼了麼?

不僅沒有,而且已經發展為融資2600w刀,擁有17名員工的公司。

  • Deno會取代Node麼?

在可預見的未來,Deno都會是小而美的狀態。在某些細分領域逐漸蠶食Node的市場份額。

  • 我應該使用Deno麼?

如果你要寫個小指令碼或者搞個小專案,相比於NodeDeno的開發體驗直接拉滿。而且白嫖Deno Deploy不香麼?

  • 還有什麼推薦Deno的理由麼?

有,你看看隔壁Go那凸眼睛火腿腸。再看看Deno的小恐龍敲可愛有木有~