Edit

createDevMiddleware()

Create Vite's development middleware (for HMR, lazy transpiling, static assets, ...).

You usually don't need to call createDevMiddleware() yourself, because the development middleware is automatically created if you:

You usually only need to call createDevMiddleware() if you run the server yourself (e.g. $ node server/index.js instead of +server.js/+serverEntry.js), see: renderPage() > Without +serverEntry.js.

import { createDevMiddleware } from 'vike/server'
 
const {
  devMiddleware, // The development middleware
  viteConfig, // Resolved Vite configuration
  viteServer // Vite's development server
} = await createDevMiddleware({
  root: './path/to/app', // (optional, but recommended)
  viteConfig: {
    // Some Vite configuration (optional)
  }
})

Vite types:

Example

See: renderPage() > Without +serverEntry.js.

Connect to Web Request/Response

devMiddleware is a Connect middleware: it uses Node.js's req/res. To use it with a server based on Web Standards (Request/Response), such as Hono, Bun.serve() or Deno.serve(), you need a bridge, for example srvx's fetchNodeHandler():

import { createDevMiddleware } from 'vike/server'
import { fetchNodeHandler } from 'srvx/node'
 
const { devMiddleware } = await createDevMiddleware()
 
async function handleDevRequest(request) {
  let handled = true
  const response = await fetchNodeHandler(
    (req, res, next) =>
      devMiddleware(req, res, () => {
        handled = false
        next?.()
      }),
    request
  )
  return handled ? response : undefined
}
import { createDevMiddleware } from 'vike/server'
import { fetchNodeHandler } from 'srvx/node'
import type { IncomingMessage, ServerResponse } from 'node:http'
 
const { devMiddleware } = await createDevMiddleware()
 
async function handleDevRequest(request: Request): Promise<Response | undefined> {
  let handled = true
  const response = await fetchNodeHandler(
    (req: IncomingMessage, res: ServerResponse, next?: () => void) =>
      devMiddleware(req, res, () => {
        handled = false
        next?.()
      }),
    request
  )
  return handled ? response : undefined
}

Vite wants to move away from Connect, see vitejs/ecosystem#16.

See also