# Bun 与 Deno 部署

URL: https://caijiao.org/hono/05-deploy/03-bun-deno
Source: docs/hono/05-deploy/03-bun-deno.md
Description: 学习 Hono 在 Bun 和 Deno 中的创建、运行和部署要点，并了解多运行时代码复用方式。

Hono 支持 Bun 和 Deno。它们都更接近现代 Web API 模型，适合快速启动服务、编写脚本 API 或部署到对应平台。

## Bun 项目

创建项目：

```bash
bun create hono@latest my-bun-api
cd my-bun-api
bun install
bun run dev
```

入口通常类似：

```ts
import { Hono } from 'hono'

const app = new Hono()

app.get('/', (c) => c.text('Hello Bun!'))

export default app
```

Bun 可以直接运行 TypeScript，开发体验很轻。生产部署时仍然要考虑进程管理、日志、健康检查和环境变量。

## Deno 项目

创建项目：

```bash
deno init --npm hono@latest my-deno-api
cd my-deno-api
deno task dev
```

Deno 有权限模型，运行时可能需要显式允许网络、环境变量或文件访问。部署前要检查 `deno.json` 中的任务配置。

## 共享 Hono 应用

如果你希望同一套路由可在多个运行时中复用，把核心应用放进独立文件：

```ts
// app.ts
import { Hono } from 'hono'

export function createApp() {
  const app = new Hono()

  app.get('/health', (c) => c.json({ ok: true }))

  return app
}
```

不同运行时只写入口：

```ts
// index.ts
import { createApp } from './app'

export default createApp()
```

Node.js 入口则使用适配器：

```ts
import { serve } from '@hono/node-server'
import { createApp } from './app'

serve(createApp())
```

## 注意依赖差异

不是所有 npm 包都能在 Bun、Deno、Workers 中无差别运行。选择依赖时注意：

- 是否依赖 Node.js 原生模块。
- 是否使用文件系统、进程、TCP Socket 等平台能力。
- 是否支持 ESM。
- 是否能在目标部署平台打包。

Hono 的核心代码可以跨运行时，但你的数据库驱动、日志库、鉴权库和第三方 SDK 未必可以。

## 选择建议

- 已经使用 Bun 工具链，可以直接用 Bun 模板。
- 想要 Deno 权限模型和部署生态，可以选择 Deno。
- 需要最广泛的传统生态，Node.js 仍然更稳。
- 目标是边缘部署，优先考虑 Cloudflare Workers 等平台模板。
