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