Node.js 之父着急宣布:Deno 将迎来重大变革,更好地兼容 Node 和 npm 包
或许是因为受到来自近日大火的「Bun」的压力,Deno 官方在 8 月 15 日发布了一篇名为《Deno 即将发生重大变化》的博文。
Deno 的焦虑
2018 年,Node.js 的创始人 Ryan Dahl 在 JSConf EU 上做了主题为 “10 Things I Regret About Node.js” 的分享,Ryan 回顾了在他看来当初开发 Node.js 时留下的十大遗憾。由于 Node.js 现在已经广泛应用于各个领域,为了保证兼容性,对 Node.js 底层进行大规模改造已经不现实。于是 Ryan 宣布他决定开发一个全新的 JavaScript 运行时以解决当初的种种缺陷,这便是 Deno 的由来。
Deno 由以下技术构建:
Rust(Deno 的核心是用 Rust 编写的,Node 用 C ++ 编写)
Tokio(用 Rust 编写的事件循环)
TypeScript(Deno 支持 JavaScript 和开箱即用的 TypeScript)
V8(google 在 Chrome 和 Node 等中使用的 JavaScript 运行时)
不过,尽管 Deno 宣称解决了一些长期困扰开发者的老大难问题(把 es-modules 设定成默认值,引入了第一方 TypeScript 支持(无需在发布前转译 npm 模块等等),但在一些用户看来,Deno 在解决老问题的同时,也引入了不少新问题。
其中,生态是 Deno 主要被诟病的问题。首先,Deno 对包解析和语法做的变更过于大刀阔斧,导致没法跟原有 npm 生态系统兼容。换言之,Deno 需要培养起自己的全新库生态。虽然 Deno 慢慢开始支持一些早期库,但一个项目的影响力会直接决定它的发展上限。当然也有一些变通方法,比如把 npm 包转换成 Deno 包的 CDN,但也有人觉得这不是什么好招。
此外,Deno 还有着不少暴露其半成品身份的问题,比如缺少 package.json。无论是从模块解析的角度来看,还是从缺少 manifest 文件出发,Deno 都不允许开发者为自己的包编写可扩展元数据。GoLang 甚至专门为此引入了 go.mod。
即将有重大变革
8 月 15 日,Deno 官方发布了一篇名为《Deno 即将发生重大变化》的博文。这个时机点难免让人将其与前阵子大火的「Bun」联想起来。
Bun 是今年才发布的前端工具链项目,作者是前 Stripe 开发人员 Jared Sumner 。不同于 Node.js 和 Deno 使用的 V8 引擎,Bun 使用 JavaScriptCore 引擎,并用 Zig 编程语言编写。
据悉,Bun 最初只是一种 JavaScript webserver,但在后续发展中逐渐酝酿出了全面颠覆 JS 生态系统的野心,它的性能表现优异,其 React 的服务器端渲染速度据称是 Node 或 Deno 的三倍以上。
面对这样的强劲新对手,Deno 也迫不及待要预告自己的新动态和进展。
根据官方博文,Deno 这次想要对外强调的进展包括:
团队一直在通过更新降低 Deno 对 npm 包的导入门槛,预计未来三个月内,绝大多数 npm 包都能在 Deno 中顺畅运行。
Deno 目标是成为最快的 JavaScript 运行时。这里向新用户稍做解释,Deno 的下个版本将包含新的 HTTP 服务器,这也是有史以来速度最快的 JavaScript Web 服务器。
考虑到不少大型企业和公司初创团队都在使用 Deno,其将面向这些商业用户提供办公时段专用套餐。
下面我们一同看看 Deno 具体的变化是什么样的:
Node 与 npm 兼容性
在未来三个月内,有 80% 到 90% 的 npm 包都能够顺畅运行在 Deno 当中。具体实现方式是使用特殊的 npm URL,具体示例:
import express from "npm:express@5";
未来三个月内,大多数 npm 模块都能通过上述方式作为依赖项引入。用户将告别 node_modules 文件夹、告别 npm install;这些包将被自动下载至 Deno 缓存内。从类型检查到 LSP、再到 deno vendor,所有 Deno 工具都可以使用这些 npm 包。
最快的 JavaScript 运行时
官方称 Deno 将成为速度最快的 JavaScript 运行时,没有之一。他们 100% 相信,Deno 自身的技术堆栈、V8 再加上 Rust 完全可以把这个目标变成现实。
Deno 的 HTTP 服务器也在经历大改,“现在我们向大家正式宣布,它就是有史以来速度最快的 JavaScript Web 服务器。我们整个运营系统的优化度越来越高,能够直连 V8 Fast API 以通过 JS 快速调用本机代码。同样地,我们的外部函数接口(FFI)也迎来了振奋人心的更新。请注意,我们可不是在针对少数极端情况进行优化,而是真正实现了整体实践层面的性能提升。”
Deno 表示,预计在今年夏天结束之前,相关成果就将正式发布、供大家上手体验。
支持企业用户
Deno 指出,在最近进行的调查中,发现近半数 Deno 活跃用户会在工作当中使用 Deno,其中包括不少大企业的开发者和初创公司创始人。未来,团队希望将为在商业环境中使用 Deno 的朋友们提供免费办公时段套餐。
因为 Deno 团队的规模还相当有限,所以呼吁相关用户先填写表单,需求将根据大家的项目规模和紧迫性进行优先级排序。
表格地址:https://docs.google.com/forms/d/e/1FAIpQLSewMCz1wB8SMZI8n7xUVeH00tBo5xLBGmj26-QVjjhQ4FfZlQ/viewform
流畅的开发者体验
在接下来几个月中,Deno 将陆续发布后续更新,包括全部第三方 Deno 代码实现全文符号搜索,以及自动为 JavaScript 和 TypeScript 项目生成文档等。下图为功能预览界面:
最后,Ryan Dahl 表示对 Deno 过去几年中建立的庞大生态系统和良好的支持成效感到自豪。目前,Deno 在 GitHub 上的下载量已突破 410 万次,月活跃用户高达 25 万,项目采用率还在持续提升。
“哇,对兼容 npm 的 Deno 非常感兴趣!我认为这将消除进入 Deno 的巨大障碍。”
“一旦 Deno 发布了这些功能,我将再次尝试 Deno。”
从网友的反应来看,Deno 的这番“紧急预告”已经开始产生效果。不过,用户也许还得等两三个月才能用上改进后的 Deno。
参考链接:
https://deno.com/blog/changes
《试图颠覆 JavaScript 生态?亲身试用新 JS 运行时 Bun 后,我觉得未来可期》
https://www.infoq.cn/article/3ZyWlLFvesQtS8acV7UU
来源:InfoQ
觉得本文对你有帮助?请分享给更多人
点赞和在看就是最大的支持❤️