Hono + TypeScript 后端项目搭建完整笔记

5 阅读5分钟

Hono + TypeScript 项目搭建完整笔记

用 Hono 框架 + TypeScript 从 0 搭建一个 Node.js 后端项目的完整流程。包括环境配置、项目初始化、第一个接口、GitHub 仓库管理。

目录


一、技术栈选型

工具作用为什么选
Node.js 20+JavaScript 运行时LTS 版本,支持 --env-file 等新特性
TypeScript类型系统后端必备,保证类型安全
HonoHTTP 框架比 Express 更现代、更轻、性能更好,语法接近 Web 标准
pnpm包管理器比 npm 快、省磁盘空间(硬链接)
tsxTS 运行器开发期直接跑 .ts,无需编译

Hono vs Express 对比

维度ExpressHono
类型支持弱(需手动定义)原生 TS,类型推导强
运行环境仅 NodeNode / Bun / Deno / Cloudflare Workers
API 风格Callback / Promise基于 Web Fetch 标准
体积较大轻量(0 依赖)
生态老牌、丰富新兴、增长快

结论:新项目 TS 后端,Hono 是 2026 年的默认选择之一。


二、环境准备

1. 检查环境

node --version    # 需要 >= 20
git --version
brew --version    # Mac 推荐用 Homebrew 管理工具

2. 装 pnpm

brew install pnpm
pnpm --version

3. 项目目录建议

cd ~
mkdir -p code        # 或者你习惯的位置
cd code
mkdir my-project
cd my-project

三、项目初始化

1. 初始化 package.json

pnpm init

生成基础 package.json,稍后会改 scripts 部分。

2. 装核心依赖

# 运行时依赖
pnpm add hono @hono/node-server

# 开发依赖
pnpm add -D typescript @types/node tsx

说明:

  • hono — 框架本体
  • @hono/node-server — Hono 跑在 Node 上的适配器(Hono 本身可以跑很多环境)
  • typescript — TS 编译器
  • @types/node — Node API 的类型定义
  • tsx — 直接跑 .ts 文件的工具(开发期用,无需 build)

3. 初始化 TypeScript 配置

pnpm tsc --init

生成 tsconfig.json。默认配置够用,无需修改。

4. 项目目录结构

my-project/
├── src/
│   └── index.ts          # 入口文件
├── package.json
├── pnpm-lock.yaml
├── tsconfig.json
└── .gitignore
mkdir src
touch src/index.ts

四、第一个 Hono 应用

1. 最小可运行代码

// src/index.ts
import { Hono } from 'hono'
import { serve } from '@hono/node-server'

const app = new Hono()

app.get('/', (c) => {
  return c.json({
    name: 'my-project',
    version: '0.1.0',
    message: 'Hello from Hono'
  })
})

app.get('/health', (c) => {
  return c.json({
    status: 'ok',
    timestamp: new Date().toISOString()
  })
})

const port = 3000
serve({
  fetch: app.fetch,
  port
})

console.log(`Server running on http://localhost:${port}`)

2. Hono 核心 API 速览

API用途
new Hono()创建应用实例
app.get(path, handler)注册 GET 路由
app.post(path, handler)注册 POST 路由
app.put / delete / patch其他 HTTP 方法
app.use(middleware)注册中间件
c.json(data)返回 JSON
c.text(str)返回纯文本
c.req.param('id')获取 URL 参数
c.req.query('q')获取 query 参数
c.req.json()解析 JSON body

3. Context 对象(c)

每个 handler 接收一个 c(Context),封装了请求和响应:

app.get('/users/:id', (c) => {
  const id = c.req.param('id')              // URL 参数
  const search = c.req.query('search')      // query
  const auth = c.req.header('Authorization') // header
  
  return c.json({ id, search }, 200)        // 第二个参数是 HTTP 状态码
})

五、开发模式与脚本

1. 配置 package.json scripts

{
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "start": "tsx src/index.ts"
  }
}

说明:

  • devwatch 模式,文件改了自动重启(开发期用)
  • start — 单次启动(生产或测试时用)

2. 启动开发服务

pnpm dev

应该看到:

Server running on http://localhost:3000

3. 测试接口

# 浏览器或 curl
curl http://localhost:3000/
curl http://localhost:3000/health

4. 文件改动自动重启

tsx watch 监听文件变化,改保存后自动重启进程。等同于 nodemon。


六、Git 与 GitHub 配置

1. 初始化 Git

git init

2. 必备 .gitignore

# 依赖
node_modules/

# 编辑器
.DS_Store
.vscode/
.idea/

# 环境变量
.env
.env.local

# 日志
*.log

# 构建产物
dist/
build/

关键:.envnode_modules/ 必须忽略。

  • .env — 会包含密码、API key,推上 GitHub 等于公开
  • node_modules/ — 体积巨大且可重新安装

3. 第一次 commit

git add .
git status              # 检查准备提交的文件
git commit -m "feat: initial project setup with Hono"

4. Conventional Commits 规范

推荐 commit message 用约定式前缀:

前缀用途示例
feat:新功能feat: add health check endpoint
fix:修 bugfix: resolve cors issue
docs:文档变更docs: update README
chore:杂事(依赖更新等)chore: bump hono to v4.x
refactor:重构refactor: extract route handlers
test:测试相关test: add unit tests for routes
style:格式化(无逻辑)style: format code with prettier

参考:www.conventionalcommits.org/

5. 推到 GitHub

# 1. GitHub 网页:创建 Public 仓库
#    (注意:不要勾选 Initialize with README,本地已经有了)

# 2. 关联远程仓库
git remote add origin https://github.com/your-id/my-project.git
git branch -M main
git push -u origin main

6. README 模板

# my-project

> 项目简介

## 技术栈

- TypeScript
- Hono
- Node.js 20+

## 快速开始

```bash
pnpm install
pnpm dev
```

访问 http://localhost:3000

## 接口

| 方法 | 路径 | 描述 |
|---|---|---|
| GET | / | Hello world |
| GET | /health | 健康检查 |

## License

MIT

七、关键概念

1. 为什么不用 Bun?

Bun 是更激进的替代品(运行时 + 包管理 + 打包器),性能更快。

维度Node + tsxBun
稳定性成熟还在快速演进
生态兼容完美部分包不兼容
启动速度较快极快
团队接受度标配仍在普及

结论:新手或团队项目用 Node + tsx 稳妥;个人项目想尝鲜可以试 Bun。

2. 为什么 pnpm 而不是 npm / yarn

npmyarnpnpm
安装速度
磁盘占用每项目独立 node_modules同上全局硬链接,省 50%+ 空间
严格依赖松散松散严格(只能访问声明的依赖)
主流度默认老牌新兴主流

2026 年的 TS 项目,pnpm 是默认推荐。

3. tsx vs ts-node vs tsc

工具用途
tscTS 编译器,把 .ts 编译成 .js(生产用)
ts-node老牌 TS 直接运行器(基于 tsc)
tsx新一代 TS 运行器,基于 esbuild,速度快 10 倍

开发期:用 tsx(快、watch 模式好用) 生产期:用 tsc 编译后 node dist/index.js(或直接用 tsx)

4. HTTP 状态码常用速查

含义用法
200OK成功响应
201CreatedPOST 创建成功
204No Content成功但没有返回数据(常用于 DELETE)
400Bad Request请求参数错误
401Unauthorized未登录
403Forbidden已登录但无权限
404Not Found资源不存在
409Conflict资源冲突(如重复创建)
500Internal Server Error服务器错误

5. RESTful 路径设计原则

GET    /users          # 列表
POST   /users          # 创建
GET    /users/:id      # 详情
PUT    /users/:id      # 全量更新
PATCH  /users/:id      # 部分更新
DELETE /users/:id      # 删除

复数名词 + HTTP 动词 表达资源操作。


八、参考资源


下一篇笔记会涵盖:Zod 输入验证 / 中间件 / 错误处理 / RESTful 路由设计。