Zum Inhalt springen

Cloudflare Workers + Vite ​

Mit Cloudflare Workers, Vite und dem @cloudflare/vite-plugin kannst du eine Fullstack-Anwendung erstellen. Diese Konfiguration bietet einen schnellen Vite-Entwicklungsserver, serverseitiges Rendering mit Honos JSX-Renderer und von Vite gebündelte clientseitige Skripte. Alles läuft auf Cloudflare Workers.

Dies ist die empfohlene Vorgehensweise, um ein neues Fullstack-Projekt auf Cloudflare zu starten.

1. Einrichtung ​

Für Cloudflare Workers mit Vite steht eine Projektvorlage zur Verfügung. Starte dein Projekt mit dem Befehl „create-hono“. Wähle für dieses Beispiel die Vorlage cloudflare-workers+vite aus.

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

Wechsle nach my-app und installiere die Abhängigkeiten.

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

Unten findest du eine grundlegende Verzeichnisstruktur.

text
./
├── package.json
├── public // Put your static files here.
├── src
│   ├── index.tsx // The entry point for server-side.
│   ├── renderer.tsx
│   └── style.css
├── tsconfig.json
├── vite.config.ts
└── wrangler.jsonc

Die Datei vite.config.ts kombiniert das Cloudflare-Plugin mit vite-ssr-components für 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 ​

Bearbeite src/index.tsx wie folgt:

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

Der renderer wird in src/renderer.tsx definiert. Er verwendet Honos JSX-Renderer-Middleware zusammen mit vite-ssr-components, das den Vite-Client und die Assets einbindet:

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. Ausführen ​

Starte den Entwicklungsserver lokal. Öffne anschließend http://localhost:5173 in deinem Webbrowser.

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

4. Bereitstellung ​

Wenn du ein Cloudflare-Konto hast, kannst du die Anwendung auf Cloudflare bereitstellen. Das Skript deploy baut sie mit Vite und veröffentlicht sie anschließend mit Wrangler.

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

Bindings ​

Du kannst Cloudflare-Bindings wie Variablen, KV, D1 und weitere verwenden. Konfiguriere die Bindings in wrangler.jsonc. Um beispielsweise eine Variable namens MY_NAME hinzuzufügen:

jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "my-app",
  "compatibility_date": "2025-08-03",
  "main": "./src/index.tsx",
  "vars": {
    "MY_NAME": "Hono",
  },
}

Um die Typen für deine Bindings zu generieren, führe das Skript cf-typegen aus:

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

Dadurch wird eine Schnittstelle CloudflareBindings generiert. Übergib sie als generischen Typparameter an Hono:

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

Greife anschließend über c.env auf die Bindings zu:

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

Clientseite ​

Mit vite-ssr-components kannst du clientseitige Skripte über Vite laden. Füge eine Script-Komponente hinzu, die auf den Einstiegspunkt deines Clients verweist. Vite übernimmt das Bündeln sowohl für die Entwicklung als auch für die Produktion:

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>
  )
})

Weitere Informationen findest du in der Dokumentation zu @cloudflare/vite-plugin und bei vite-ssr-components.

Veröffentlicht unter der MIT-Lizenz.