Cloudflare Workers + Vite
你可以使用 Vite 和 @cloudflare/vite-plugin 在 Cloudflare Workers 上构建一个全栈应用。 这种设置为你提供了快速的 Vite 开发服务器、借助 Hono 的 JSX 渲染器进行服务端渲染,以及由 Vite 打包的客户端脚本——全部运行在 Cloudflare Workers 上。
这是在 Cloudflare 上启动一个新的全栈项目的推荐方式。
1. 设置
可用于 Cloudflare Workers 和 Vite 的起始模板已提供。 使用 "create-hono" 命令启动你的项目。 在本示例中请选择 cloudflare-workers+vite 模板。
npm create hono@latest my-appyarn create hono my-apppnpm create hono my-appbun create hono@latest my-appdeno init --npm hono my-app进入 my-app 并安装依赖。
cd my-app
npm icd my-app
yarncd my-app
pnpm icd my-app
bun i下面是一个基本的目录结构。
./
├── package.json
├── public // 将你的静态文件放在这里。
├── src
│ ├── index.tsx // 服务端入口点。
│ ├── renderer.tsx
│ └── style.css
├── tsconfig.json
├── vite.config.ts
└── wrangler.jsoncvite.config.ts 将 Cloudflare 插件与 vite-ssr-components 组合用于 SSR:
import { cloudflare } from '@cloudflare/vite-plugin'
import { defineConfig } from 'vite'
import ssrPlugin from 'vite-ssr-components/plugin'
export default defineConfig({
plugins: [cloudflare(), ssrPlugin()],
})2. Hello World
将 src/index.tsx 编辑为如下内容:
import { Hono } from 'hono'
import { renderer } from './renderer'
const app = new Hono()
app.use(renderer)
app.get('/', (c) => {
return c.render(<h1>Hello, Cloudflare Workers!</h1>)
})
export default apprenderer 在 src/renderer.tsx 中定义,使用了 Hono 的 JSX 渲染中间件 以及 vite-ssr-components,它会连接 Vite 的客户端和资源:
import { jsxRenderer } from 'hono/jsx-renderer'
import { Link, ViteClient } from 'vite-ssr-components/hono'
export const renderer = jsxRenderer(({ children }) => {
return (
<html>
<head>
<ViteClient />
<Link href='/src/style.css' rel='stylesheet' />
</head>
<body>{children}</body>
</html>
)
})3. 运行
在本地运行开发服务器。然后,在你的网页浏览器中访问 http://localhost:5173。
npm run devyarn devpnpm devbun run dev4. 部署
如果你有 Cloudflare 账户,可以部署到 Cloudflare。deploy 脚本会先使用 Vite 构建,然后通过 Wrangler 发布。
npm run deployyarn deploypnpm run deploybun run deploy绑定
你可以使用 Cloudflare Bindings,例如 Variables、KV、D1 等。 在 wrangler.jsonc 中进行配置。例如,要添加一个名为 MY_NAME 的 Variable:
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "my-app",
"compatibility_date": "2025-08-03",
"main": "./src/index.tsx",
"vars": {
"MY_NAME": "Hono",
},
}要为你的 Bindings 生成类型,请运行 cf-typegen 脚本:
npm run cf-typegenyarn cf-typegenpnpm run cf-typegenbun run cf-typegen这会生成一个 CloudflareBindings 接口。将其作为泛型传递给 Hono:
const app = new Hono<{ Bindings: CloudflareBindings }>()然后通过 c.env 访问 Bindings:
app.get('/', (c) => {
return c.render(<h1>你好!{c.env.MY_NAME}</h1>)
})客户端
vite-ssr-components 允许你通过 Vite 加载客户端脚本。 添加一个指向你的客户端入口点的 Script 组件,Vite 会同时处理开发环境和生产环境的打包:
import { jsxRenderer } from 'hono/jsx-renderer'
import { Script, ViteClient } from 'vite-ssr-components/hono'
export const renderer = jsxRenderer(({ children }) => {
return (
<html>
<head>
<ViteClient />
<Script src='/src/client.ts' />
</head>
<body>{children}</body>
</html>
)
})更多详情请参阅 @cloudflare/vite-plugin 文档 和 vite-ssr-components。