公告落地,Deno 开发者进入选择期
10 月 9 号周五,Deno 官方博客发布 Ryan Dahl 署名公告:Deno 团队整体加入 Cloudflare。Deno runtime 将继续维护一年,按月发布 bugfix 和安全更新,之后官方停止开发;代码保持开源,社区可接手。Deno Deploy 只剩六个月,之后关停。JSR 继续运营并迁入 Cloudflare 基础设施,rusty_v8 继续支持,并计划整合进 workerd。
公告在 Hacker News 上获得 1234 分、668 条评论。有人将其称为 acquihire,也有人提出 fork 社区版本。对使用者来说,更现实的问题是:Deno 的权限模型、内置服务、单文件编译等能力,能否在 Node 26 与 Bun 中延续。
一项短链服务实测给出了部分答案。测试使用 Deno 2.9.7、Bun 1.4.3(10 月 10 号发布)和 Node 26.11.1,实现同一套 PUT 写入、GET 302 跳转和列表统计逻辑。三个版本各约 40 来行,功能均可跑通。
代码迁移顺畅,权限模型仍是缺口
API 迁移成本低于预期。Deno 项目使用 Deno.serve、Deno.openKv 和 Deno.env;Node 26 可用 node:http 搭配 22.5 之后内置的 node:sqlite;Bun 使用 Bun.serve 和 bun:sqlite。两种方式均无需安装 npm 包。
但 Deno.openKv 在 2.9.7 仍属于 unstable API,需要显式加 –unstable-kv。依赖 KV 的项目仍要留意这个门槛。
权限模型的差距更明显。Deno 默认拒绝:不带参数运行时,会在读取 PORT 环境变量时拦截,并提示需要 –allow-env;补齐 –allow-net、–allow-env 和 –unstable-kv 后才正常。Node 26 的 –permission 已能限制网络监听,并提示 –allow-net,但 –allow-net 仍是实验性能力,且 process.env.PORT 默认不受限制。Bun 1.4.3 的 bun –help 和 bun run –help 中则没有 permission、allow 相关选项。
这意味着,Deno 的默认全拒与细粒度报错暂无完整平替。若项目依赖权限隔离,迁移会降级。
单文件编译:Bun 快而轻,Node SEA 仍偏实验性
短链服务常需要编译成单个可执行文件。实测数据如下:
- deno compile:104.6 MB,耗时 26.4 s。
- bun build –compile:90.8 MB,耗时 0.158 s。
- Node SEA(CJS):150.1 MB,4 步流程 + 5.8 s 注入。
Bun 的速度和产物大小都占优。Deno 的 26.4 s 在 1 核 2G 沙盒中显得较长,但是一次性成本。Node SEA 需要写 sea-config.json、生成 blob、复制二进制并用 postject 注入;测试中,ESM 主脚本注入成功但运行失败,改成 CommonJS 后才跑通。到 Node 26 为止,SEA 仍标注实验性,ESM 支持尚未完善。
三个产物均在沙盒中验证:Deno 与 Bun 二进制开箱即用,Node 的 CJS 版本也能完成 PUT 写入和 302 跳转。
替代路径清晰,真正的成本在工具链与安全边界
整体看,HTTP 服务、SQLite 存储、TypeScript 开箱和单文件分发,Node 与 Bun 已大体接住。Node 26 默认开启 type stripping,纯类型标注的 .ts 文件可直接用 node 执行;多数场景不需要额外装包。
真正难替代的是两点。一是权限模型:Node 的网络限制仍在实验阶段,环境变量未纳入默认管控;Bun 尚无对应机制。二是内置工具链:deno fmt、deno lint 零配置,Node 需要自建 prettier 与 eslint 配置,Bun 有内置 test 但没有 fmt 和 lint。
从迁移节奏看,Deno Deploy 上的服务只有六个月窗口,应尽早迁移;自托管 Deno 项目在一年维护期内仍有安全更新,可继续使用,但新项目可转向 Node 或 Bun。对于 –allow-net,在转正前不宜作为生产依赖。
Deno 官方停止开发后,社区是否会接手仍不确定。对开发者而言,接下来一年要做的不是等待一个运行时复活,而是重新评估权限边界、部署效率和维护成本。
原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/deno-wei-hu-dao-ji-shi-yi-nian-node-26-yu-bun-neng-fou-jie