Deno 2.8 正式发布,再次超越 Bun,史上最大的次版本升级诞生!

👇 今日要闻

打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。

最近 Bun 效仿 Deno,要从 Zig 语言移植到 Rust "锈化"重写,源码 PR 已经合并了,正式官宣指日可待。

Deno 也不甘示弱,Deno 团队官宣 v2.8 正式发布,号称 Deno 进化史上最大的次版本升级,主要包括:

  • Node 兼容性远超 Bun,测试率超过七成
  • Deno CLI 新增命令,可以替换 pnpm install 等
  • 新增 JS Stage3 import defer 导入延迟提案
  • TS 更新到 v6 主版本,支持类型剥离

👉 Node 兼容性超过 Bun

之前 Deno 2.7 针对 Node 官方测试的通过率约为 42%,勉强超过了 Bun 1.3.14 的 40.6%。

Deno 2.8 更进一步,几乎涵盖了所有 node: 模块,测试率飙升到 76.4%,大幅领先 Bun,Deno 和 Bun 的"Rust 竞赛"预计会愈演愈烈。

👉 新增子命令

Deno CLI 新增了几个命令。

deno audit fix 能将漏洞模块升级到最新的补丁版,同时满足我们配置的主/次版本限制,任何需要升级主版本的模块都会单独列出,方便你决定升级与否。

deno bump-version 能更新 package.json 或 deno.json 中的 version 字段。它也适用于 workspace 工作区模式,在根目录运行能将更新应用到每个模块。

还有其他几个命令,我把它们浓缩为下列表格:

命令 作用
deno ci 根据 lockfile 执行安装
deno pack 约等于 tsc + npm pack
deno transpile TSX 类型剥离,输出 JS
deno why 等价于 npm explain / pnpm why

👉 包管理变更

Deno CLI 不再要求 deno add 和 deno install 命令添加 npm: 前缀,默认将无前缀的包名视为 npm 模块。

注意,CLI 中的 JSR 注册源仍需要 jsr: 前缀,ESM 模块中的 import 语句也要求 npm: 前缀。

这样,deno install 能取代 npm install 或 pnpm install 等命令,允许你使用 Deno 取代 npm 作为包管理器,但项目还是跑在 Node 上,既符合 Node 开发者的肌肉记忆,又提升了安装速度。

过去,monorepo 跨包共享依赖需要手动协调版本,当共享依赖更新时,每个模块的 package.json 必须同步更新。

Deno 2.8 采用 pnpm 的 catalog: 协议,这允许在 workspace 根目录中声明一个默认的 "catalog" 字段:

然后只需使用 catalog: 说明符,就能从任意工作区模块同步依赖版本:

此外,类似 pnpm 的模块隔离结构,Deno 默认的 node_modules 目录结构是隔离的,每个模块都有自己的符号链接解析树,因此它只能看到自己显式声明的依赖。

但一些旧工具仍然依赖 npm install 生成依赖提升的扁平目录结构,每个模块都位于 node_modules 顶层,并且可以 require() 它找到的任何依赖。

deno.json 新增了 nodeModulesLinker 字段,默认值是 "isolated"(隔离目录):

设置 "nodeModulesLinker": "hoisted",可以移植一个依赖 npm 扁平目录的现有 Node 项目。

还有,Deno 2.6 就新增了 min-release-age 最小发布时限配置,来拦截大多数供应链攻击。Deno 2.8 支持通过 .npmrc 配置:

👉 JS 新功能

Deno 支持 JS Stage3 的 import defer(延迟导入提案),模块能不运行其顶层代码加载,这样该模块只在首次访问其导出成员时才被执行。

举个栗子,模块先导入,但可以延迟执行:

这样,模块求值会延迟到访问导出成员的那个时间点。当模块求值成本高昂、但又不常使用时,import defer 新特性能缩短启动时间。

👉 TS 更新

TS 编译器更新到 v6.0.3 版本了,这是为了对齐 ts-go(TS 7.x) 的过渡版本,包括类型系统支持 ES2026 的最新功能等大量改动。

此外,deno check 默认包含 lib.node,不需要在 deno.json 中的 compilerOptions.lib 手动添加 "node" 了。

如上,Deno 自动支持 process / Buffer 等 Node 专属的全局变量和类型。lib.node 基于 @types/node 实现,Deno 会从 npm 拉取该模块,process.versions.node 匹配 Node 的主版本,目前是 v24.x。

如果你希望使用其他版本的 @types/node,比如仍在维护的更低版本 Node 22,可以在 package.json 中将其安装为开发依赖:

然后在 deno.json 中让 Deno 导入对应版本的模块:

👉 开发体验

Deno 2.8 支持让 Chrome DevTools(开发者工具)检查网络流量:

  1. 运行程序时添加 --inspect-wait 等参数
  2. 在 Chromium 中打开 chrome://inspect
  3. 点击 Deno 目标上的 Inspect(检查)

开发者工具的"Network"网络选项卡会显示客户端请求和响应头等所有内容:

相同的事件也会通过 node:inspector 客户端和 VS Code 的 JavaScript 调试器等工具显示出来。

此外,Deno 2.8 上线了一个与 Node --cpu-prof 匹配的内置 CPU 分析器,当程序退出时,Deno 会将 V8 的 CPU 分析结果写入磁盘。

.cpuprofile 文件可以在 Chrome DevTools 中直接打开,也可以输出为另外两种格式:

  • --cpu-prof-flamegraph 会生成一个独立的交互式 SVG 图片,可以在浏览器中打开
  • --cpu-prof-md 会生成一份人类可读的 Markdown 报告,包含最热门的函数等详细信息

👇 重点总结

Deno 2.8 是 Deno 进化史上最大的次版本升级,主要包括:

  • Deno CLI 新增了若干命令,Node 兼容性远超 Bun
  • 新增 JS Stage3 的 import defer 延迟导入提案
  • 包管理器对齐 npm 行为,支持模块提升的扁平化目录
  • TS 更新到 v6 主版本,支持类型剥离和 Node 专属类型

除此之外,Deno 官方博客还展示了 Deno 2.8 的性能提升,Web API 新功能等,更多技术细节另请参阅官方博客。

以上就是今日《前端快讯》的全部内容了,希望对你有所帮助。

👍 感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:

相关推荐
卸任31 分钟前
Vibe coding工具使用心得
前端·ai编程
brien91 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance2 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M2 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写2 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李2 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易2 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding2 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马2 小时前
前沿视界
前端
kyriewen2 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员