构建一次,随处部署。KISS 架构(S:静态)—— 静态前端 + Serverless APIs。
deno run -A npm:vite build
# 输出:dist/ 目录,包含静态 HTML + island JS 块KISS 架构的 S 约束意味着两个独立的部署目标:
| 组件 | 内容 | 部署到 | 扩展 |
|---|---|---|---|
| 静态前端 | dist/(HTML + DSD + Island JS) | CDN / GitHub Pages / S3 | 全局边缘缓存 |
| API Routes | Hono handlers | Serverless functions | 按需自动扩展 |
静态文件和 API 函数解耦。前端部署到最便宜的主机; API 部署到 Serverless 平台,独立扩展。
KISS 架构只生成静态文件。dist/ 目录包含 HTML(带 DSD)和 island JS 包。部署到任何静态主机。
在 vite.config.ts 中设置 base 为 /repo-name/
指向 dist/ 目录
Framework: Other,output: dist/
Publish directory: dist/
上传 dist/ 到 S3 桶
只需上传 dist/
Hono API routes 可以作为 Serverless 函数部署到任何支持 JavaScript 的平台:
原生 Hono 支持,零配置
Hono 内置 adapter
Hono adapter 可用
通过 @hono/aws-lambda adapter
// app/routes/api/posts.ts
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.json({ posts: [] }));
export default app;
export type AppType = typeof app;// vite.config.ts
export default defineConfig({
base: '/my-repo/',
plugins: [kiss()],
})添加一个 GitHub Actions workflow 在推送 main 时构建并部署。参见本仓库的 .github/workflows/deploy.yml 获取完整示例。
KISS 架构的 S 约束——构建产物仅为纯静态文件——意味着 构建输出就是最终产品。生产环境中没有 SSR 运行时。这不是 限制;这是一种确保以下目标的规范:
动态数据属于 API Routes,不属于单体服务器。这就是 Jamstack 的方式—— KISS 架构将其作为 S 约束强制执行,而非约定。