大家好,我卡颂。
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
的小恐龙敲可恶有木有~