Deno2.0 正式发布,向 Node.js 兼容
By 蚊子
开源 JavaScript 和 TypeScript 运行时 Deno 于 10 月 9 日发布了 2.0 版本。
Deno 创建于 2018 年,由 Node.js 之父 Ryan Dahl 发起,旨在为 JavaScript 和 TypeScript 提供一个安全、现代化的运行时环境。经过 4 年的发展,Deno 1.0 版本于 2020 年正式发布。
尽管 Deno 一直在持续且稳定地进步,但其与 Node.js 之间存在的不兼容性,确实在一定程度上制约了其更广泛的应用。作为一款现代化的 JavaScript/TypeScript 工具链,Deno 在此前的版本中便已经彰显了其强大的实力,包括原生支持 TypeScript、内置的代码格式化与测试功能等。而此次推出的 2.0 版本,更是带来了一个令人瞩目的亮点——Deno 现已实现了与 Node.js 生态的全面向后兼容。
任何基于 JavaScript 语言的工具链,都无法回避 Node.js 这些年构建的生态环境。Node.js 起步早,生态完善,项目众多。工具要足够优秀且迁移方便,才有动力让开发者从 Node.js 迁移到新的工具链上。
Deno2.0
的核心变革在于它全面拥抱了 Node.js 和 npm 生态。这一变革使得现有的 Node.js 应用程序能够无缝地迁移到 Deno 平台上运行。开发者们不仅可以在当前的 Node.js 项目中灵活引入 Deno,还能逐步采纳 Deno 提供的各种高效工具,例如利用 deno fmt 来格式化代码。
此外,Deno 2.0 还原生支持了 package.json
和 node_modules
,并推出了诸如 deno install
、deno add
和 deno remove
等全新的包管理命令。这些改进使得在 Deno 中使用 npm 包的体验与在 Node.js 中几乎别无二致。Deno 团队自豪地表示,这种兼容性的实现不仅性能卓越,而且在依赖安装速度上甚至超越了 npm。
值得一提的是,Deno 的标准库也已经趋于稳定,提供了数十个经过精心筛选和严格审核的实用模块。其中不少模块能够替代 npm 上广受欢迎的同类库,涵盖了测试框架、CLI 解析、基础工具集等多个领域。此外,Deno 2.0 还对私有 npm 源、monorepo 工作区等复杂场景提供了完善的支持。
以下是 Deno 2.0 的主要更新:
- Node.js 与 npm 的兼容性:Deno 2 实现了与 Node.js 和 npm 的全面向后兼容,使得现有的 Node 应用能够无缝地在 Deno 环境中运行。
- 包管理系统的革新:Deno 2 引入了 deno install、deno add 和 deno remove 等命令,进一步增强了其包管理功能,同时全面支持 package.json 和 node_modules,为开发者提供了更加便捷的包管理体验。
- 稳定且丰富的标准库:Deno 的标准库已经趋于成熟稳定,其中包含了多种经过严格审计的实用模块,为开发者提供了强大的支持。
- 私有 npm 注册表的无缝接入:Deno 2 支持私有 npm 注册表,只需通过 .npmrc 文件进行简单配置,即可轻松接入并使用。
- 工作区与 Monorepo 的全面支持:Deno 2 提供了对工作区和 Monorepo 的全面支持,使得开发者能够更加方便地管理多个项目的依赖关系。
- 现代 JavaScript 注册表 JSR 的引入:Deno 2 引入了现代、开源的 JavaScript 注册表 JSR,不仅支持 TypeScript 和模块加载,还为开发者提供了更加灵活和高效的包管理选项。
- 广泛的框架支持:Deno 2 支持多种流行的 JavaScript 框架,如 Next.js、Astro、Angular 等,使得开发者能够在 Deno 环境中轻松使用这些框架进行开发。
- 性能改进:Deno 在各种真实场景中进行了大量性能优化,提升了启动时间和处理复杂请求的能力。
- 改进现有功能:
- deno fmt 现在可以格式化 HTML、CSS 和 YAML。
- deno lint 增加了 Node 特定规则和快速修复。
- deno test 支持使用 node:test 编写的测试。
- deno doc 的 HTML 输出设计改进,搜索功能增强。
- deno compile 支持代码签名和 Windows 上的图标。
- deno serve 可以在多个核心上并行运行 HTTP 服务器。
尽管 Deno 在兼容性方面做出了诸多努力,但它始终坚持着“简约而不简单”的设计理念。用户仍然无需依赖任何配置文件即可运行 Deno 代码。新增的包管理命令也并非强制使用,而是为那些需要管理更复杂项目的用户提供了便利。Deno 团队明确表示,他们的目标并非取代 Node.js,而是为 JavaScript 社区提供一个更加现代、高效且功能全面的工具链,让 Web 开发变得更加轻松愉悦。
想参与讨论,或者查看更多优质的文章: