
Deno,是由 Ryan Dahl 构建的 JavaScript 运行时,最近发布了2.5版本,带来了包括增加权限集(Permission Sets)、新的测试钩子和对 WebSockets 的改进等特性。作为发布的一部分,还有许多性能方面的改进。
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 功能对齐。
捆绑包运行时(bundle runtime)API 也已交付,使得在运行时可以对模块进行程序化打包。这个功能增强了在 2.4 版本中交付的 deno bundle 命令。捆绑包 API 目前是实验性的,必须使用-unstable-bundle标记。
WebSocket头信息进行了改进,允许在发起新的 WebSocket 连接时使用自定义的头信息,这对于认证或传递自定义元数据和状态可能会有所助益。发布博客文章中有一个说明,这个新功能无法在所有浏览器中运行。
Deno 2.5 还包括了性能优化。emit 缓存现在在更新之间会持久化地存在,除非底层的 deno_ast 版本发生变化,这减少了不必要的重新编译。CommonJS 模块包装器的内存使用量也有所降低,这提高了 Node.js 的互操作性,而条件性的 JSX 转译在 JSX 被禁用时会完全跳过处理。核心 API 也进行了类似的改进:structuredClone现在使用了更快的内部实现,而Buffer.subarray和Buffer.prototype.utf8Slice都已针对二进制数据处理进行了优化。Deno 的 Node-API 层进行了性能调整,以最小化加载原生 Node 模块时的开销。
Deno 是一个开源、安全的 JavaScript 运行时,目标是提供一流的 TypeScript 支持、集成工具和默认安全性。它在 GitHub 上有超过 100k+星标,有 400k+活跃社区用户和 2M+社区模块。Deno v2.5 带来了许多改进和功能,你可以在 Deno 网站上的发布文章中找到完整的变更列表。
查看英文原文: Deno 2.5 Brings Support for Permission Sets and Test API Hooks








评论