Deno 2.5 带来了对权限集和测试 API 钩子的支持
由 Ryan Dahl 构建的 JavaScript 运行时 Deno 发布了 2.5 版本,通过引入权限集、新的测试钩子以及 WebSocket 的改进带来了多项增强。此版本还包括一系列性能优化。
Deno 2.5 将运行时环境升级至 V8 14.0 和 TypeScript 5.9.2,从而解锁了更新的 JavaScript 语言特性、性能改进和更好的 TypeScript 支持。该版本还对用于日期和时间管理的 Temporal API 进行了更改,目标是使 –unstable-temporal 标志在未来的版本中不再必要。
其中一个重要的变化是在配置文件中支持权限集,为开发者提供了更细粒度和声明式的运行时权限控制。通过能够在 deno.json 配置文件中定义权限规范,可以根据运行的命令在运行时应用不同的预定义权限。权限集可以使用新的 permission-set 标志来应用,例如:
|
|
此外,Deno 通过添加设置和拆卸钩子增强了其测试 API,使测试作者能够直接在 Deno.test 中进行生命周期控制。现在有四个新的钩子:Deno.test.beforeAll、Deno.test.beforeEach、Deno.test.afterAll 和 Deno.test.afterEach。
Reddit 上的一位用户对测试 API 中可用的新钩子表示兴奋,然而 YouTube 上的一条评论认为 beforeAll 的加入为时已晚,并指出它应该更早地实现与 Node.js 的功能对等。
运行时捆绑 API 也已发布,支持在运行时对模块进行程序化捆绑。此功能增强了在 2.4 版本中发布的 deno bundle 命令。该捆绑 API 目前是实验性的,必须使用 –unstable-bundle 标志。
WebSocket 头信息也得到了改进,允许在发起新的 WebSocket 连接时使用自定义头信息,这对于身份验证或传递自定义元数据和状态非常有益。发布博客中提到,此新功能并非在所有浏览器中都有效。
Deno 2.5 还包括性能优化。除非底层的 deno_ast 版本发生变化,否则发射缓存现在会在更新之间持久保存,减少了不必要的重新编译。CommonJS 模块包装器的内存使用量已降低,改善了 Node.js 的互操作性,而条件性 JSX 转译在 JSX 禁用时会完全跳过处理。核心 API 也进行了类似的改进:structuredClone 现在使用了更快的内部实现,并且 Buffer.subarray 和 Buffer.prototype.utf8Slice 已针对二进制数据处理进行了优化。Deno 的 Node-API 层进行了性能调优,以最小化加载原生 Node 模块时的开销。
Deno 是一个开源的、安全的 JavaScript 运行时,设计上提供一流的 TypeScript 支持、集成工具和 purposeful 默认安全。它在 GitHub 上拥有超过 10 万颗星,40 万以上的活跃社区用户和 200 万以上的社区模块。Deno v2.5 带来了许多改进和功能,您可以在 Deno 网站上的发布文章中查看完整的变更列表。