乐趣区

关于前端:2年过去了有谁还记得曾想取代Nodejs的他

大家好,我卡颂。

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/std@0.166.0/io/util.ts";

相比于 Node 中引入一个模块就等于引入一个 npm 包,Denourl 的形式引入模块显然是更凋谢的。

毕竟,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亲自上阵,满足了开发者的一些刚需,比方:

  • 开箱即用的工具链工具(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 公布时有一点起伏):

事实

往年 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 的小恐龙敲可恶有木有~

退出移动版