Hono —— 在日语中意为火焰 🔥 —— 是一个基于 Web Standards 构建的小巧、简单且超快的 Web 框架。它可以运行在任何 JavaScript runtime 上:Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、AWS Lambda、Lambda\@Edge 和 Node.js。
快,但不仅仅是快。
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!'))
export default app
快速开始
npm create hono@latest
yarn create hono
pnpm create hono@latest
bun create hono@latest
deno init --npm hono@latest
特性
- 超快 🚀 - 路由器
RegExpRouter
速度非常快,不使用线性循环,快到离谱。 - 轻量 🪶 -
hono/tiny
预设小于 12kB。Hono 没有任何依赖,只使用 Web Standard API。 - 多运行时 🌍 - 可运行在 Cloudflare Workers、Fastly Compute、Deno、Bun、AWS Lambda、Lambda\@Edge 或 Node.js 上。相同代码可在所有平台运行。
- 开箱即用 🔋 - Hono 内置 middleware、自定义 middleware,以及第三方 middleware,开箱即用。
- 极佳开发体验 (DX) 😃 - 超简洁的 API,原生 TypeScript 支持。现在,我们有了完整的 “类型” 体验。
使用场景
Hono 是一个类似于 Express 的简单 Web 应用框架,但不包含前端功能。它可以运行在 CDN 边缘节点 (Edges),并且结合 middleware 可以构建更大型的应用程序。以下是一些使用场景示例:
- 构建 Web API
- 后端服务器的代理
- CDN 前端
- 边缘应用 (Edge application)
- 用作库的基础服务器
- 全栈应用 (Full-stack application)
1 分钟了解 Hono
下面演示如何使用 Hono 创建一个适用于 Cloudflare Workers 的应用。
超快
Hono 是最快的,相比其他 Cloudflare Workers 的路由器,它的性能领先。
Hono x 402,820 ops/sec ±4.78% (80 runs sampled)
itty-router x 212,598 ops/sec ±3.11% (87 runs sampled)
sunder x 297,036 ops/sec ±4.76% (77 runs sampled)
worktop x 197,345 ops/sec ±2.40% (88 runs sampled)
Fastest is Hono
✨ Done in 28.06s.
查看 更多性能基准。
轻量
Hono 非常小巧。使用 hono/tiny
预设时,压缩后的体积 小于 14KB。虽然 Hono 提供了大量 middleware 和 adapter,但只有在使用时才会被打包。作为对比,Express 的体积是 572KB。
$ npx wrangler dev --minify ./src/index.ts
⛅️ wrangler 2.20.0
--------------------
⬣ Listening at http://0.0.0.0:8787
- http://127.0.0.1:8787
- http://192.168.128.165:8787
Total Upload: 11.47 KiB / gzip: 4.34 KiB
多种路由器
Hono 提供多种路由器。
RegExpRouter 是 JavaScript 世界中最快的路由器,它通过在分发前创建一个大型正则表达式来匹配路由。借助 SmartRouter,可以支持所有路由模式。
LinearRouter 能非常快地注册路由,适合每次初始化应用的环境。PatternRouter 则是简单地添加和匹配模式,体积小巧。
查看 更多关于路由的信息。
基于 Web 标准
由于使用了 Web Standards,Hono 能运行在多个平台上:
- Cloudflare Workers
- Cloudflare Pages
- Fastly Compute
- Deno
- Bun
- Vercel
- AWS Lambda
- Lambda\@Edge
- 其他平台
并且通过 Node.js adapter,Hono 可以运行在 Node.js 上。
开发者体验
Hono 提供令人愉快的 Developer Experience(开发者体验)。
通过 Context 对象,可以轻松访问 Request/Response。此外,Hono 完全使用 TypeScript 编写,拥有完整的 类型系统。
例如,路径参数会自动推断为 字面量类型。
另外,Validator 和 Hono Client hc 支持 RPC 模式。在 RPC 模式中,你可以使用自己喜欢的验证器(例如 Zod),并且能够轻松将服务端 API 规范与客户端共享,从而构建 类型安全的应用程序。