Hono —— 在日语中意为火焰 🔥 —— 是一个基于 Web Standards 构建的小巧、简单且超快的 Web 框架。它可以运行在任何 JavaScript runtime 上:Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、AWS Lambda、Lambda\@Edge 和 Node.js。

快,但不仅仅是快。

  1. import { Hono } from 'hono'
  2. const app = new Hono()
  3. app.get('/', (c) => c.text('Hono!'))
  4. export default app

快速开始

  1. npm create hono@latest
  1. yarn create hono
  1. pnpm create hono@latest
  1. bun create hono@latest
  1. 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 的应用。

演示 gif:快速创建 Hono 应用并进行快速迭代

超快

Hono 是最快的,相比其他 Cloudflare Workers 的路由器,它的性能领先。

  1. Hono x 402,820 ops/sec ±4.78% (80 runs sampled)
  2. itty-router x 212,598 ops/sec ±3.11% (87 runs sampled)
  3. sunder x 297,036 ops/sec ±4.76% (77 runs sampled)
  4. worktop x 197,345 ops/sec ±2.40% (88 runs sampled)
  5. Fastest is Hono
  6. Done in 28.06s.

查看 更多性能基准

轻量

Hono 非常小巧。使用 hono/tiny 预设时,压缩后的体积 小于 14KB。虽然 Hono 提供了大量 middleware 和 adapter,但只有在使用时才会被打包。作为对比,Express 的体积是 572KB。

  1. $ npx wrangler dev --minify ./src/index.ts
  2. ⛅️ wrangler 2.20.0
  3. --------------------
  4. Listening at http://0.0.0.0:8787
  5. - http://127.0.0.1:8787
  6. - http://192.168.128.165:8787
  7. 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 编写,拥有完整的 类型系统

例如,路径参数会自动推断为 字面量类型

截图展示:在 URL 参数中,Hono 提供了正确的字面量类型提示。URL "/entry//" 允许 request 参数是 "date" 或 "id"

另外,Validator 和 Hono Client hc 支持 RPC 模式。在 RPC 模式中,你可以使用自己喜欢的验证器(例如 Zod),并且能够轻松将服务端 API 规范与客户端共享,从而构建 类型安全的应用程序