Skip to content

Cloudflare Workers + Vite

你可以使用 Vite@cloudflare/vite-pluginCloudflare Workers 上构建一个全栈应用。 这种设置为你提供了快速的 Vite 开发服务器、借助 Hono 的 JSX 渲染器进行服务端渲染,以及由 Vite 打包的客户端脚本——全部运行在 Cloudflare Workers 上。

这是在 Cloudflare 上启动一个新的全栈项目的推荐方式。

1. 设置

可用于 Cloudflare Workers 和 Vite 的起始模板已提供。 使用 "create-hono" 命令启动你的项目。 在本示例中请选择 cloudflare-workers+vite 模板。

sh
npm create hono@latest my-app
sh
yarn create hono my-app
sh
pnpm create hono my-app
sh
bun create hono@latest my-app
sh
deno init --npm hono my-app

进入 my-app 并安装依赖。

sh
cd my-app
npm i
sh
cd my-app
yarn
sh
cd my-app
pnpm i
sh
cd my-app
bun i

下面是一个基本的目录结构。

text
./
├── package.json
├── public // 将你的静态文件放在这里。
├── src
│   ├── index.tsx // 服务端入口点。
│   ├── renderer.tsx
│   └── style.css
├── tsconfig.json
├── vite.config.ts
└── wrangler.jsonc

vite.config.ts 将 Cloudflare 插件与 vite-ssr-components 组合用于 SSR:

ts
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 编辑为如下内容:

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 app

renderersrc/renderer.tsx 中定义,使用了 Hono 的 JSX 渲染中间件 以及 vite-ssr-components,它会连接 Vite 的客户端和资源:

tsx
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

sh
npm run dev
sh
yarn dev
sh
pnpm dev
sh
bun run dev

4. 部署

如果你有 Cloudflare 账户,可以部署到 Cloudflare。deploy 脚本会先使用 Vite 构建,然后通过 Wrangler 发布。

sh
npm run deploy
sh
yarn deploy
sh
pnpm run deploy
sh
bun run deploy

绑定

你可以使用 Cloudflare Bindings,例如 Variables、KV、D1 等。 在 wrangler.jsonc 中进行配置。例如,要添加一个名为 MY_NAME 的 Variable:

jsonc
{
  "$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 脚本:

sh
npm run cf-typegen
sh
yarn cf-typegen
sh
pnpm run cf-typegen
sh
bun run cf-typegen

这会生成一个 CloudflareBindings 接口。将其作为泛型传递给 Hono

ts
const app = new Hono<{ Bindings: CloudflareBindings }>()

然后通过 c.env 访问 Bindings:

tsx
app.get('/', (c) => {
  return c.render(<h1>你好!{c.env.MY_NAME}</h1>)
})

客户端

vite-ssr-components 允许你通过 Vite 加载客户端脚本。 添加一个指向你的客户端入口点的 Script 组件,Vite 会同时处理开发环境和生产环境的打包:

tsx
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