Aller au contenu

Cloudflare Workers + Vite ​

Vous pouvez créer une application full-stack sur Cloudflare Workers avec Vite en utilisant @cloudflare/vite-plugin. Cette configuration fournit un serveur de développement Vite rapide, le rendu côté serveur avec le moteur JSX de Hono et des scripts côté client regroupés par Vite, le tout sur Cloudflare Workers.

C'est la méthode recommandée pour démarrer un nouveau projet full-stack sur Cloudflare.

1. Configuration ​

Un modèle de démarrage est disponible pour Cloudflare Workers avec Vite. Créez votre projet avec la commande « create-hono ». Sélectionnez le modèle cloudflare-workers+vite pour cet exemple.

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

Ouvrez my-app et installez les dépendances.

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

Voici une arborescence de base.

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

Le fichier vite.config.ts combine le plugin Cloudflare avec vite-ssr-components pour le rendu côté serveur :

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. Bonjour le monde ​

Modifiez src/index.tsx comme suit :

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

Le renderer est défini dans src/renderer.tsx avec le middleware de rendu JSX de Hono et vite-ssr-components, qui connecte le client et les ressources de 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. Exécution ​

Démarrez le serveur de développement localement. Ensuite, ouvrez http://localhost:5173 dans votre navigateur web.

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

4. Déploiement ​

Si vous avez un compte Cloudflare, vous pouvez déployer sur Cloudflare. Le script deploy compile avec Vite, puis publie avec Wrangler.

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

Bindings ​

Vous pouvez utiliser les bindings Cloudflare, tels que les variables, KV, D1 et autres. Configurez-les dans wrangler.jsonc. Par exemple, pour ajouter une variable nommée MY_NAME :

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

Pour générer les types de vos bindings, exécutez le script cf-typegen :

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

Il génère une interface CloudflareBindings. Passez-la à Hono comme paramètre générique :

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

Accédez ensuite aux bindings via c.env :

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

Côté client ​

vite-ssr-components permet de charger des scripts côté client via Vite. Ajoutez un composant Script pointant vers l'entrée du client ; Vite gère le regroupement des fichiers en développement et en production :

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

Pour en savoir plus, consultez la documentation de @cloudflare/vite-plugin et vite-ssr-components.

Publié sous licence MIT.