大家好,我卡颂。
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/[email protected]/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
的小恐龙敲可爱有木有~