被创造者嫌弃,Node.js 如何应对来自 Deno 的挑战
4天前
JavaScript 运行时 Node.js 于日前更新到了 15 版本,该软件自发布至今已走过了 11 年的岁月。但在今年 5 月,其竞争对手 Deno 也发布了 1.0 版本。Deno 是一个 Javascript/TypeScript 的运行时,由 Node.js 之父 Ryan Dahl 开发,是专门为了修复 Dahl 认为的 Node.js 的关键弱点而创建的--包括安全问题、使用集中式仓库系统(npm)以及"繁琐的工具"。
目前,Deno 在 Github 上已有 68.7k 个 star,且还在持续增长中。Node.js 目前在 Github 上的 star 数则为 74.5k。
为了了解当前一代 Node.js 维护者是如何应对新的挑战者的,进而了解他们是如何应对 Dahl 的批评的,一位名为 Richard MacManus 的编辑采访了红帽公司的高级软件工程师、Node.js 技术指导委员会成员 Bethany Griggs。Griggs 自 2016 年以来一直参与 Node.js 项目,主要工作于 Node.js Release Working Group。
Griggs 在采访中表示,Node.js 仍然是构建云原生微服务和后端应用程序的主要运行时之一。并补充称,Node.js 在 IoT 项目中也很流行,其中她最喜欢的一例应用就是 — NASA 使用 Node.js 来监视 space suit 数据。
对此,Richard 则认为,除了 space suit 之外,Node.js 已不再被视为 JavaScript 开发的热门新事物。相比较而言,前端 React 框架 Next.js,可能要更占据上风。且与 Deno 的一些先进特性(例如,Deno 是用流行的新编程语言 Rust 编写)相比,Node.js 项目如今更遵循相对保守的发展道路。Richard 称,因此,Node.js 15 是一个增量升级也就不足为奇了。
另一方面,Griggs 还指出 15 版中有一重要更新内容是,将未处理的拒绝改为了throw
模式。并表示,这意味着开发人员现在可以获得“早期反馈,即他们正在忽略应用程序中的错误处理”。Richard 认为,不可否认这是一次有价值的技术更新,但他认为这更新不太可能在技术圈引起多大的关注和讨论。
回应 Ryan Dahl 的批评
在几年前,Dahl 曾做了一个演讲,讲述了他创建 Node.js 后的遗憾。指出一个主要的问题是,他没有把运行时做到尽可能的安全。之后,他则在创建 Deno 时解决了这一问题,Deno 也被宣传为 "默认安全"。
Richard 表明,他更好奇的是,Node.js 项目组是否进行了新的开发、或者修复,以解决 Ryan Dahl 在过去几年中提出的一些问题?
而 Griggs 则较为官方地回答了 Richard 的这一问题表示,Node.js 将从 Deno 中“汲取灵感”。不过她也指出,其实早在 Deno 诞生之前,Node.js 就已经有了围绕安全执行和限制 API 访问的讨论历史。并列出了几个与安全性有关的“实验性功能”(示例1,示例2)。
此外,Griggs 也表示,她并不认为 Deno 的安全优先的访问方式适合 Node.js。"对于实际应用来说,你很快就得妥协到授予对许多 API 的访问权,所以净价值与复杂性的关系会很低。"
她还透露,虽然 Node.js 项目团队有兴趣尝试更强的安全功能,但目前还没有一个充分的理由来驱使他们做出采用与 Deno 相同策略的决定。
至于 Dahl 批评 npm 是一个封闭的模块生态系统,Griggs 则认为,Node.js 没有理由在这一点上做出改变。
Griggs 还表示,Next.js 和 Gatsby 等 JavaScript 框架的流行,以及 Jamstack 及其静态网站生成方式的兴起,也并没有对 Node.js 的应用造成多大影响。Node.js 仍被大量用于构建微服务;在构成客户端 JavaScript 开发管道的工具中,Node.js 也仍然被大量使用。
最后,在未来愿景方面,Griggs 透露,在 Node.js 项目的未来十年计划中,该团队已将开发人员的经验、稳定性、操作质量,Node.js 维护者经验以及最新的技术和 API 定义为优先事项。