如何将HonoJS服务端应用部署到GitHub Pages作为API服务器
解决HonoJS应用部署到GitHub Pages作为API服务器的问题
核心前提说明
GitHub Pages仅支持静态文件托管,没法直接运行Node.js后端服务,所以常规的Hono服务器模式直接部署肯定行不通。要实现API端点功能,你得把Hono的API响应提前生成为静态文件,或者用静态适配方案。
具体实现步骤
1. 调整Hono应用,生成静态API文件
如果你的API端点返回固定数据(比如/alphabet的JSON列表),可以写个脚本预生成静态JSON文件:
- 在项目里新建
scripts/generate-static-api.js文件,内容如下:
import { Hono } from 'hono' import fs from 'fs/promises' import path from 'path' // 复制你的Hono路由逻辑 const app = new Hono() app.get('/alphabet', (c) => { return c.json(['A', 'B', 'C', 'D']) }) // 生成静态文件到dist目录 async function generateStaticFiles() { const distDir = path.join(process.cwd(), 'dist') await fs.mkdir(distDir, { recursive: true }) // 模拟请求API并保存响应为静态文件 const res = await app.request('/alphabet') const jsonContent = await res.text() await fs.writeFile(path.join(distDir, 'alphabet.json'), jsonContent) } generateStaticFiles()
- 然后在
package.json的scripts里添加构建命令:
"scripts": { "generate:api": "node scripts/generate-static-api.js", "build": "npm run generate:api" }
2. 配置GitHub Actions自动部署
是的,你需要添加GitHub Actions工作流来自动化构建、生成静态文件并部署到GitHub Pages:
- 在项目根目录新建
.github/workflows/deploy.yml,内容如下:
name: 部署到GitHub Pages on: push: branches: [ develop ] # 你的开发分支 jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装Node.js环境 uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - name: 安装依赖 run: npm install - name: 构建生成静态API文件 run: npm run build - name: 部署到GitHub Pages uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist publish_branch: gh-pages # GitHub Pages默认用的分支
3. 配置GitHub Pages仓库设置
- 打开你的仓库
o_ho_no的Settings页面,找到Pages选项。 - 将Source设置为
gh-pages分支,目录选/root,保存设置。
4. 验证API访问
部署完成后,你可以通过https://xkeshav.github.io/o_ho_no/alphabet.json访问预生成的JSON数据。如果想让路径是/alphabet(不带.json),可以在dist目录下建alphabet/index.html,在文件里返回JSON内容,但这种方式比较麻烦,更推荐直接用带后缀的静态文件路径。
注意事项
如果你的API需要动态处理请求(比如根据参数返回不同内容),GitHub Pages完全没法支持这种动态逻辑,这时建议迁移到Cloudflare Pages、Vercel这类支持Node.js后端的平台,它们可以直接部署Hono应用并运行动态API。
内容的提问来源于stack exchange,提问作者xkeshav
相关产品推荐
相关产品推荐

