专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
前端大全  ·  用了组合式 (Composition) ... ·  4 天前  
前端早读课  ·  【第3390期】如何在用户界面中管理危险操作 ·  3 天前  
奇舞精选  ·  React 中的接口隔离原则 ·  5 天前  
奇舞精选  ·  React 中的接口隔离原则 ·  5 天前  
前端大全  ·  这个 JavaScript API ... ·  6 天前  
前端早读课  ·  【第3387期】多种前端框架SSR性能大比拼 ·  6 天前  
51好读  ›  专栏  ›  前端早读课

【早阅】Deno 2.0 发布:七大核心更新亮点

前端早读课  · 公众号  · 前端  · 2024-10-12 08:00

正文

作者:@Ryan Dahl、@Bert Belder、@Bartek Iwańczuk、@Andy Jiang
原文:https://deno.com/blog/v2.0

背景

Deno 2 于 2024 年 10 月 9 日正式发布,这是 Deno 项目的一个重要里程碑。Deno 是由 Node.js 的创始人 Ryan Dahl 创建的现代 JavaScript 和 TypeScript 运行时,旨在简化 Web 开发。Deno 2 的发布标志着该项目在兼容性和功能性上的重大提升,特别是在与 Node.js 和 npm 的兼容性方面。

【早阅】Deno 2 候选版已推出,并提供长期支持和 npm 兼容性。

要点

Deno 2 的主要亮点包括:

1、与 Node.js 和 npm 向后相容:无缝运行现有 Node 应用程序,并逐步採用 Deno 工具链。

  • 支持 package.json、node_modules 和 npm 工作区。

  • 使用 npm: 指定符直接导入 npm 包,支援超过 200 万个 npm 模组,包括 gRPC、ssh2、Prisma 等复杂包,以及 Node-API 原生插件。

  • 支持使用 Next.js、Astro、Remix 等流行 JavaScript 框架。

2、Deno 成为包管理工具:

  • deno install:高速安装依赖项,支援 package.json 和全局缓存。

  • deno add 和 deno remove:添加和删除 package.json 或 deno.json 中的包。

3、JavaScript 代码库注册表 (JSR):

  • 原生支持 TypeScript,处理多种运行时和环境的模组加载复杂性,仅允许 ESM,自动从 JSDoc 样式注释生成文档。

  • 提供无缝的发布和使用模块的开发者体验。

4、标准代码库稳定版:

  • 提供数十个经过严格审核的实用模块,涵盖数据操作、Web 相关逻辑、JavaScript 特定功能等。

  • 可在 JSR 上获得,并可供其他运行时和环境使用。

5、私有 npm 注册表:

  • 通过 .npmrc 文件支持私有 npm 注册表。

6、工作区和多仓库支持:

  • 使用 deno.json 中的 workspace 属性列出成员目录,支援 Deno 和 npm 工作区。

  • 可以发佈工作区成员到 JSR。

7、长期支持 (LTS) 版本:

从 Deno 2.1 开始,LTS 通道将接收为期六个月的关键错误修复,确保生产环境的稳定性和可靠性。

分析

Deno 2 的发布是对现有 JavaScript 生态系统的一次重大改进。通过完全兼容 Node.js 和 npm,Deno 2 不仅解决了开发者在使用不同运行时环境时的痛点,还提供了更高效的包管理工具。例如,deno install 命令比 npm 快 15%,在热缓存情况下甚至快 90%。此外,Deno 2 的标准库提供了丰富的内置工具,如格式化、代码检查和测试框架,进一步简化了开发流程。

如果 Deno 与 Node 完全向后兼容,为什么我应该使用 Deno 而不是 Node?

虽然 Deno 可以运行 Node 程序,但它的设计是为了推动 JavaScript 和 TypeScript 的发展。Deno 提供了 Node 缺少的功能,例如原生 TypeScript 支持、网络标准 API、完整的 JavaScript 开发工具链以及默认安全执行的模型 —— 所有这些都包含在一个没有外部依赖关係的可执行文件中。使用 Deno 而不是 Node 可以节省您在设置和配置上的时间,让您可以更快地开始编码并交付价值。

为什么要换新标志?可爱的恐龙吉祥物怎么了?

从一开始,雨中的可爱蜥脚类动物就是 Deno 的代言人。它古怪的魅力一直是 Deno 的标志,但设计从未一致 —— 至少有两个 “官方” 版本和无数的变体。随著 Deno 2.0 的发布,我们决定是时候更新了。

我们希望保留 Deno 用户喜爱的原始角色的本质,同时赋予它更精緻的外观,以匹配 Deno 专业和生产级的特性。在重新设计的过程中,我们意识到下雨的背景虽然怀旧,但无法很好地扩展,而且经常被人忽视。它太过于繁琐,尤其是在尺寸较小的时候,所以我们不得不放弃它。

经过多次迭代,我们发现将设计简化到其核心元素可以达到适当的平衡 —— 简单而友好,同时又严肃而可靠 —— 就像 Deno 一样。

Deno 最初的愿景是雄心勃勃地要现代化 JavaScript。但是,在所有向后兼容的工作都完成之后,Deno 最初的愿景还剩下什么?

重写整个 JavaScript 生态系统是不切实际的。随着 Deno 的规模超越小型程序,我们认识到支持 Node 和 npm 兼容性至关重要 —— 尤其是对于 gRPC 和 AWS SDK 等工具,这些工具从头开始重写是不切实际的。

但 Deno 的目标不是成为 Rust 中的 Node 克隆或直接替代品。我们的目标是提升 JavaScript,超越 2010 年代的 CommonJS,并以开发人员可以实际采用的方式缩小服务器端和浏览器环境之间的差距。我们拒绝接受 JavaScript 必须保持一团糟的工具和无休止的转译层,无法进化。

Deno 最初的愿景仍然是我们所做一切的核心。这包括原生 TypeScript 支持、内置的网络标准,如 Promises、顶级 await、Wasm、fetch 和 ES 模块,以及一个包含所有功能的工具链 —— 所有这些都打包在一个单一的、无依赖关係的可执行文件中。当然,它默认是安全的,就像网络一样。

支持 npm 只是使 Deno 更加通用的步骤之一。我们的使命是提供一个现代化的、简化的工具链,以增强 JavaScript 体验 —— 而不仅仅是支持遗留代码。虽然我们调整了方法,但我们的愿景仍然相同:简化和增强网络开发。

我喜欢 Deno 是因为它不需要任何配置文件,但是随着新的包管理器添加,Deno 2 是否变得更像 Node,需要一个 package.json 来添加依赖项?

一点也不。您仍然可以运行单文件程序或脚本,而无需任何配置或依赖清单 —— 这一点没有改变。新的包管理命令(deno install、deno add 和 deno remove)是可选工具,旨在简化依赖项的管理,无论您使用的是 deno.json 还是 package.json 文件。它们对于更大、更複杂的项目特别有用,但如果您更喜欢不配置的简单性,它们也不会妨碍您。

我们的核心目标之一是 Deno 可以缩小到简单的单文件程序,这些程序可以导入任何包而无需额外的仪式。例如,在 Jupyter 笔记本或快速脚本等上下文中,您可以轻鬆地执行以下操作:

 import * as Plot from "npm:@observablehq/plot";

同时,Deno 可以扩展到处理具有多个文件甚至多个包的大型项目,例如在单体仓库中。这种灵活性确保了 Deno 对于小型脚本和大型生产级应用程序都同样有效。

影响

Deno 2 的发布对整个 JavaScript 和 TypeScript 开发社区具有深远的影响。首先,它为开发者提供了一个更加统一和高效的开发环境,减少了配置和管理的复杂性。其次,通过支持私有 npm 注册表和工作区,Deno 2 为企业级应用提供了更强大的支持,有助于提高开发效率和代码质量。最后,LTS 版本的引入为大型组织提供了更稳定和可靠的生产环境,减少了频繁更新带来的风险。

结论

Deno 2 的发布标志着 JavaScript 和 TypeScript 开发进入了一个新的时代。通过提供完全兼容 Node.js 和 npm 的能力,Deno 2 不仅简化了现有项目的迁移,还为未来的开发提供了更强大的工具和更高效的开发流程。随着 Deno 2 的广泛采用,预计将会有更多的企业和开发者转向这一现代化的运行时环境,从而推动整个行业向更高效、更安全的方向发展。

AI 阅:了解技术资讯的一种方式。