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