四时宝库

程序员的知识宝库

聊一聊新发布的Deno 2

2024.10.9日,Deno 2 正式发布,这是一个为现代 Web 开发而设计的一体化工具链,旨在简化 JavaScript 和 TypeScript 的开发流程。以下是 Deno 2 的一些亮点特性:

  • 原生 TypeScript 支持:Deno 2 原生支持 TypeScript,无需额外配置。
  • 基于 Web 标准构建:利用 Promises、fetch 和 ES 模块等 Web 标准,Deno 2 提供了现代的编程体验。
  • 内置工具:包括格式化、linter、类型检查器、测试框架、编译执行等,Deno 2 提供了一套完整的开发工具。
  • 默认安全:Deno 2 遵循浏览器的安全模型,确保了运行时的安全性。

Deno 2 的发布标志着 Deno 在大规模应用方面的进一步发展,它不仅提供了与传统 JavaScript 基础设施的无缝互操作性,还支持更广泛的项目和开发团队,同时保持了简单性、安全性和“包含电池”的特性。

Deno 2 的新特性包括

  • 向后兼容 Node.js 和 npm:允许无缝运行现有的 Node 应用程序。
  • 对 package.json 和 node_modules 的原生支持:简化了依赖管理和项目配置。
  • 新的包管理命令:通过 deno install、deno add 和 deno remove 命令简化了包管理。
  • 稳定的标准库:提供了一套稳定的 API,方便开发者使用。
  • 支持私有 npm 注册表:增强了对私有包和企业环境的支持。
  • 工作区和 monorepo 支持:方便大型项目和多个项目的管理。
  • 长期支持(LTS)版本:为企业级应用提供了稳定性和可预测性。
  • JSR:一个现代化的注册表:用于跨运行时共享 JavaScript 库。

此外,Deno 2 还改进了许多现有功能:

  • deno fmt 现在支持 HTML、CSS 和 YAML 的格式化。
  • deno lint 增加了特定于 Node 的规则和快速修复。
  • deno test 支持使用 node:test 运行测试。
  • deno task 可以运行 package.json 中的脚本。
  • deno doc 的 HTML 输出得到了设计改进和搜索增强。
  • deno compile 支持 Windows 上的代码签名和图标。
  • deno serve 可以跨多个内核并行运行 HTTP 服务器。
  • deno init 现在可以快速搭建库或服务器的基础架构。
  • deno jupyter 支持输出图像、图形和 HTML。
  • deno bench 支持关键部分,实现更精确的性能测量。
  • deno coverage 现在可以以 HTML 格式输出覆盖率报告。

Deno 2 的发布,无疑为 JavaScript 和 TypeScript 开发者提供了一个更加强大和便捷的开发环境。

Deno 2 的发布带来了与 Node.js 和 npm 的向后兼容性,这一特性不仅允许开发者在现有的 Node 项目中无缝集成 Deno,还能逐步采用 Deno 提供的一体化工具链。以下是 Deno 2 的一些关键兼容性和前瞻性特性:

  • 无缝集成:您可以在 Node 项目中直接运行 Deno,利用 deno install 和 deno fmt 等命令快速安装依赖和格式化代码,无需依赖 Prettier。
  • 理解 Node 项目结构:Deno 2 能够理解 package.json 和 node_modules 文件夹,甚至支持 npm 工作区,允许您在任何 Node 项目中以 ESM 格式运行 Deno。
  • 代码修复:如果存在需要调整的次要语法问题,您可以使用 deno lint --fix 命令来自动修复它们。
  • 直接导入 npm 包:如果您不喜欢杂乱的 node_modules 目录,但仍然需要使用 npm 包,您可以使用 npm: 说明符直接导入 npm 包。如果没有 package.json 和 node_modules 文件夹,Deno 将在全球缓存中安装您的包,允许您编写将 npm 依赖项合并到一个文件中的程序,无需依赖项清单或配置文件。
import chalk from "npm:chalk@5.3.0";

console.log(chalk.blue("Hello, world!"));
// 输出:Hello, world!(蓝色)
  • 依赖项管理:对于大型项目,管理依赖项可能变得复杂。通过将 npm: 说明符放入文件的导入映射中,您可以导入包的裸名称:
// deno.json
{
  "imports": {
    "chalk": "npm:chalk@5.3.0"
  }
}
import chalk from "chalk";

console.log(chalk.blue("Hello, world!"));
// 输出:Hello, world!(蓝色)
  • 访问 npm 模块:借助 npm: 说明符导入 npm 包的功能,您可以访问 Deno 中超过 200 万个 npm 模块。这甚至包括复杂的软件包,如 gRPC、ssh2、Prisma 等。Deno 还支持 Node-API 等高级功能和原生插件。
  • 支持主流框架:最后,您可以将 Deno 2 与您最喜欢的 JavaScript 框架一起使用,包括 Next.js、Astro、Remix、Angular、SvelteKit、QwikCity 等。

Deno 2 的这些特性,特别是对 Node.js 和 npm 的兼容性,为开发者提供了更多的灵活性和选择,使得在保持现有项目结构的同时,也能享受到 Deno 带来的现代化开发体验。

Deno 2 引入了 deno install 命令,使其成为一个功能强大的软件包管理器。这个新特性不仅支持 package.json 和 node_modules 文件夹,还提供了三个关键子命令来简化依赖项的安装和管理。

deno install 能够以极快的速度安装依赖项。如果项目中包含 package.json,它会迅速创建 node_modules 文件夹。如果不使用 package.json,所有依赖项将被缓存到全局缓存中,这意味着您可以在没有 package.json 的情况下运行 Deno,同时仍然享受快速的依赖项加载。

在性能方面,deno install 比 npm 的冷缓存安装快 15%,即使使用热缓存也非常快速。Deno 团队已经在性能上做出了显著改进,并承诺在未来几周内,特别是在冷缓存场景中,会有更多的性能提升。

标准库的稳定性

Deno 标准库现在已经稳定,它由数十个经过严格审核的实用程序模块组成,涵盖了从数据操作、Web 相关逻辑到特定于 JavaScript 的功能。这些模块在 JSR 上可用,并且可以被其他运行时和环境使用。

以下是一些 Deno 标准库模块及其 npm 等效包的对比:

Deno 标准库模块

npm 包

@std/testing

jest

@std/expect

chai

@std/cli

minimist

@std/collections

lodash

@std/fmt

chalk

@std/net

get-port

@std/encoding

RFC4648

有关可用软件包的完整列表,请访问 JSR。

Deno 的速度

Deno 团队一直致力于提高 Deno 在各种真实场景下的速度。他们的工作重点是提供性能改进,这对于日常的 JavaScript 和 TypeScript 开发至关重要,无论是启动时间、处理复杂请求还是整体效率。

虽然基准测试不能说明全部情况,但它们可以提供对运行时擅长领域的洞察。Deno 在一些基准测试中展示了其为开发和生产环境提供一流性能的能力。这些测试结果证明了 Deno 在性能方面的持续进步和对开发者体验的重视。

二、Deno 2的安装

Mac或Linux

$ curl -fsSL https://deno.land/install.sh | sh
...
Edit shell configs to add deno to the PATH? (Y/n)

可以选择“Y”,将Deno环境添加到PATH环境变量中。也可以创建一个符号连接,以避免配置PATH环境变量。

$ ln -s /Users/XXX/.deno/bin/deno /usr/local/bin/deno

Windows

irm https://deno.land/install.ps1 | iex

注意一点,由于Deno 2刚发布的原因,国内镜像源还没做好准备,

验证一下:

$ deno --version
deno 2.0.2 (stable, release, x86_64-apple-darwin)
v8 12.9.202.13-rusty
typescript 5.6.2

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接