大家好,我卡頌。
22年11月14日,Deno
釋出了v1.28,距離他第一個穩定版本v1.0.0釋出(2020年5月13日)已過去2年。
作為Node.js
的競爭者,Deno
似乎並沒有達到取代前者的目標。
甚至,他在前端社群的聲量也越來越小。
那麼,這兩年Deno
都經歷了什麼,未來他會取代Node.js
麼?
歡迎加入人類高質量前端框架群,帶飛
與Node.js的不同
同為js執行時環境,Deno
與Node
有什麼不同呢?
拋開各種細枝末節,他們最大的不同在於 —— Deno
將開放放在很重的地位。
什麼平臺是最開放的呢?答案是web
。
所以,在Deno
設計的方方面面都能看到web
的影子。比如:
- 原生支援很多
web API
(比如fetch
、URLSearchParams
、Web Workers
...) - 全域性變數是與瀏覽器一樣的
window
物件 - 原生支援瀏覽器標準的
ESM
規範
那麼,這些API
、標準
與開放有什麼關係呢?這裡講個小故事。
Deno
的作者Ryan Dahl同時也是Node
的作者。
在實現Node
之初,他將工作重心放在事件驅動模型的實現上。這時,有個專案中引入的模組該如何解析的問題亟待解決。
他接受了NPM
提出的package.json
建議。簡單的說,Node
中的require
方法會去package.json
中尋求如何解析模組(dependencies
、devDependencies
等欄位)。
後來,NPM
逐漸成為Node
中最流行的包管理器與事實上的標準,兩者逐漸深度捆綁。
而NPM
是一傢俬人公司,且之後被Github
收購。Github
又在微軟旗下。
可以說,佔領導份額的Node
第三方依賴管理是受私人大公司(微軟)控制的。
反觀Deno
,原生採用ESM
規範,最初有兩種模組引入方式:
- 從本地路徑引入
比如:
import xxx from './a.ts';
- 從遠端
url
引入
比如:
import * as utils from "https://deno.land/std@0.166.0/io/util.ts";
相比於Node
中引入一個模組就等於引入一個npm
包,Deno
以url
的方式引入模組顯然是更開放的。
畢竟,web
最不缺的就是url
連結了。
Ryan的理想
從上面的故事也能看出,Ryan Dahl離開Node
團隊,創立Deno
是充滿了理想主義色彩的。
在為Deno
預熱的JS ConfEU 2018中,他也明確表示:
Deno不會和Node相容,不這樣的話開發者最終實現的還是Node模組
在最初的正式版本中,Deno
也確實踐行了自己與Node
不同的風格,針對Node
眾多缺陷提出瞭解決方案,比如:
- 針對
Node
的安全性問題,加強了原生API
訪問檔案系統與網路的限制 - 捨棄了
package.json
- 原生支援
TS
這些特立獨行確實引起了開發者熱議,但並未達到很好的市場反響。
畢竟,Deno
首個正式版釋出時,Node
已經問世11年了。
在Node
問世時,Node
團隊只需要持續、穩定的迭代Node
核心API,就會有大量的JS
開發者為Node
生態貢獻優質第三方模組。
而在Deno
面世時,又會有多少開發者願意為Deno
貢獻第三方模組呢,用Node
現成的包不香麼?
於是,Deno
親自上陣,滿足了開發者的一些剛需,比如:
- 開箱即用的工具鏈工具(
linter
、formatter
、test-runner
、bundle
)
再加上原生支援TS
,可以說一個Deno
初始專案就具備了一整套工程化最佳實踐。
對比同為Rust
編寫的工具鏈工具Rome
(迭代了2年,釋出了一個linter
,一個formatter
)就能發現,Deno
的迭代速度可以說是非常快了。
- 應用框架
比如受koa
啟發的oak
,以nobundle
為賣點的全棧框架fresh
。
- 釋出系統
與Deno
深度整合的Deno Deploy
這些努力似乎並沒有取得預期的效果,對比Deno
(藍色)與Node
(紅色)的Google趨勢
。
Node
的趨勢整體走高,而Deno
的走勢極為平坦(只在20年5月v1.0釋出時有一點起伏):
現實
今年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
麼?
如果你要寫個小指令碼或者搞個小專案,相比於Node
,Deno
的開發體驗直接拉滿。而且白嫖Deno Deploy
不香麼?
- 還有什麼推薦
Deno
的理由麼?
有,你看看隔壁Go
那凸眼睛火腿腸。再看看Deno
的小恐龍敲可愛有木有~