Deno 2.8 于 5 月 22 日正式发布,官方称这是 Deno 有史以来最大的 minor 版本。此次更新不仅引入了多个全新的 CLI 子命令,还在 Node.js 兼容性、调试能力和图像处理等方面带来了显著改进。

打开网易新闻 查看精彩图片

三个全新的 CLI 子命令

此次最值得关注的是三个全新的子命令,补齐了 Deno 工具链的最后短板。

deno audit fix是对原有 deno audit 命令的升级版。之前 deno audit 可以扫描依赖树中的安全漏洞,但修复仍需开发者手动操作。deno audit fix 则更进一步 —— 它能自动将有漏洞的包升级到满足当前版本约束的最新安全版本。例如,当检测到 body-parser 存在高危漏洞时,它会自动将 1.19.0 升级到 1.20.3。这一逻辑同样适用于 --fix 标志。任何需要跨大版本升级的漏洞会被单独列出,由开发者自行决定是否接受破坏性变更。

deno bump-version用于自动管理项目的版本号。它支持 patch、minor、major 和 prerelease 级别的版本递增,更强大的能力在于 monorepo 工作空间模式:在工作空间根目录运行,它会自动递增所有成员包的版本,并同步更新 jsr: 版本约束和 import map 中的跨包引用。此外,它还支持从 Conventional Commits 记录自动推导版本增量,并提供 --dry-run 预览功能。

deno ci则专为 CI/CD 环境设计。CI 脚本和 Docker 文件最需要的往往是 "严格按照 lockfile 安装,有问题就立即报错",之前这需要记住一串复杂的 install 参数。deno ci 把这个逻辑封装成了一条命令,开箱即用。

Node.js 类型:默认包含

Deno 2.8 在 npm 兼容层面迈出了一大步:现在通过 npm: 前缀导入的包会自动获得 Node.js 类型声明。这意味着 express、qs 等大量依赖 Node 类型定义的 npm 包,在 Deno 中也能拥有完整的 TypeScript 类型检查,而无需开发者手动配置 @types/node。types/node 现在默认使用 Node 24.x 的类型定义,与 process.versions.node 保持一致。

不过这也带来了一个副作用:process、Buffer 等 Node 独有全局变量现在在类型层面默认可见,可能在跨运行时项目中造成混淆。为此 Deno 关闭了之前默认开启的 no-process-global 和 no-node-globals 规则,但这两个规则仍然可用,有需要的开发者可以在 deno.json 中重新启用。

调试能力:Chrome DevTools 现在可以查看网络流量

Deno 2.8 的调试能力也得到了重要升级。通过实现 Chrome DevTools Protocol(CDP)的 Network 域,Deno 现在允许开发者使用 Chrome/Chromium 内置的网络检查器查看 Deno 程序的所有网络活动 —— 包括 fetch ()、node:http/node:https 客户端请求,以及 Deno.upgradeWebSocket () 打开的服务端 WebSocket 连接。可以查看请求头、响应头、状态码、响应体和时序信息,与在浏览器标签页中调试网络请求的体验完全一致。

这一实现同时兼容 VS Code 的 JavaScript 调试器以及其他支持 CDP 的前端工具,意味着之前针对 Node.js 编写的调试工具无需修改即可直接用于 Deno。

图像处理与 WebCodecs

在运行时能力方面,Deno 2.8 引入了 PNG 和 WebP 解码器,并通过 WebCodecs API 对外暴露。这意味着 Deno 程序现在可以直接处理图像数据,无需依赖外部库。此外还有对 WPT(Web Platform Tests)的大量实现更新。

  • 参考来源:https://deno.com/blog/v2.8