Hono 工程化实战 05:Cloudflare、Node、Bun、Deno 部署怎么选
Hono 最大的吸引力之一,是它能跑在很多 JavaScript runtime 上。
你可以写一套类似的代码,然后部署到:
1 | Cloudflare Workers |
这很灵活。
但灵活也会带来选择困难。
很多人会问:
1 | Hono 到底应该部署在哪里? |
这篇文章不做玄学排名。
我们从项目需求出发,聊 Hono 的运行时和部署选择。
技术栈快照时间:2026-06-23。Hono adapter、Cloudflare Workers、Node/Bun/Deno 支持方式会更新,生产使用前以官方文档为准。
一、先看 Hono 的底层优势
Hono 基于 Web 标准。
核心是:
1 | Request |
这让它比很多传统 Node 框架更容易跨 runtime。
一个最小 Hono app:
1 | import { Hono } from 'hono' |
在很多平台上,这个 app.fetch 都能作为入口。
但注意:
1 | 框架代码可移植 |
一旦你用了特定平台能力,比如 D1、KV、R2、Node fs、Bun.file,迁移成本就出现了。
二、Cloudflare Workers 适合什么
Cloudflare Workers 很适合:
1 | 轻量 API |
Hono 在 Workers 上的入口通常很简单:
1 | import { Hono } from 'hono' |
使用绑定:
1 | app.get('/api/posts/:id', async (c) => { |
Workers 的优势是:
1 | 部署简单 |
但它也不适合所有场景。
三、Workers 的边界
如果你的项目强依赖这些能力,要谨慎:
1 | 本地文件系统长期读写 |
Workers 是 serverless/edge 模型。
它适合请求驱动,不适合把它当成一台长期运行的 VPS。
如果你的项目是:
1 | 视频转码 |
那 Node.js 服务、容器或专门任务系统可能更合适。
不要因为 Hono 能跑在 Workers,就把所有东西都塞到 Workers。
四、Node.js 适合什么
Node.js 仍然是最稳妥的选择之一。
适合:
1 | 传统后端 API |
Hono 跑在 Node.js 上通常用 @hono/node-server:
1 | import { serve } from '@hono/node-server' |
Node.js 的优势是:
1 | 生态成熟 |
如果你要做一个面向国内服务器、MySQL、Redis、对象存储的常规业务 API,Node.js + Hono 是很务实的组合。
五、Node.js 部署建议
Node.js 自建部署时要关心:
1 | 进程管理 |
常见结构:
1 | Nginx/Caddy |
生产入口不要直接依赖默认端口:
1 | const port = Number(process.env.PORT ?? 3000) |
健康检查:
1 | app.get('/health', (c) => { |
如果用 Docker,再配合容器健康检查。
Node.js 不是不现代。
它只是更像一台你要认真运维的服务器。
六、Bun 适合什么
Bun 的吸引力是速度和工具链整合。
适合:
1 | 新项目 |
Hono 在 Bun 上可以直接运行:
1 | import { Hono } from 'hono' |
Bun 的优点:
1 | 启动快 |
但生产选择 Bun 时要确认:
1 | 依赖是否兼容 |
对核心业务,我会先在非关键服务或内部服务上试 Bun。
不是因为 Bun 不好,而是因为生产稳定性需要实际验证。
七、Deno 适合什么
Deno 的特点是 Web 标准、安全模型、TypeScript 体验。
适合:
1 | 偏现代 Web 标准的服务 |
Hono 在 Deno 上可以:
1 | import { Hono } from 'hono' |
Deno 的优点:
1 | Web 标准一致性好 |
但如果你的团队和生态主要在 Node.js,Deno 的迁移收益不一定足够大。
选择 runtime 要看团队和依赖,不只看技术审美。
八、跨 runtime 要抽象平台能力
如果你希望 Hono app 将来能迁移,不要在业务代码里到处写平台 API。
错误示例:
1 | app.get('/api/posts', async (c) => { |
这会把 route 和 Cloudflare D1 绑死。
更好的方式:
1 | type PostRepository = { |
Cloudflare 实现一套 repository。
Node.js 实现另一套 repository。
业务 route 不关心底层是 D1、Postgres 还是 SQLite。
这就是可移植性的真实成本。
九、怎么选择
可以用这个表判断:
| 场景 | 推荐 |
|---|---|
| 轻量 API、边缘缓存、Webhook | Cloudflare Workers |
| 常规业务系统、MySQL/Postgres/Redis | Node.js |
| 内部工具、新项目试验、启动速度敏感 | Bun |
| 偏 Web 标准、安全模型、Deno Deploy | Deno |
| 长任务、重计算、原生依赖 | Node.js/容器 |
| 全球低延迟读接口 | Workers + 缓存 |
| 国内单区业务系统 | Node.js + 反向代理 |
我的默认建议:
1 | 如果你已经在 Cloudflare 生态里,用 Workers |
不要为了技术新鲜感牺牲可维护性。
十、部署前检查清单
不管部署到哪里,都要检查:
1 | 环境变量是否完整 |
Hono 的部署入口很轻。
但生产部署不是只有入口文件。
它还包括:
1 | 配置 |
Hono 给你的是跨 runtime 的自由。
你要补上的是每个 runtime 背后的工程约束。