From 03f9e09601a7d9960c41b1e6b66fe482514b346d Mon Sep 17 00:00:00 2001 From: meowtec Date: Tue, 6 Apr 2021 14:26:48 +0800 Subject: [PATCH] feat: support for serving `index.html` in middleware mode --- docs/guide/ssr.md | 5 ++++- packages/playground/ssr-react/server.js | 2 +- packages/playground/ssr-vue/server.js | 2 +- packages/vite/src/node/server/index.ts | 13 ++++++++----- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/guide/ssr.md b/docs/guide/ssr.md index cecf86ce19bb06..197a82b12e3634 100644 --- a/docs/guide/ssr.md +++ b/docs/guide/ssr.md @@ -71,8 +71,11 @@ async function createServer() { // Create vite server in middleware mode. This disables Vite's own HTML // serving logic and let the parent server take control. + // + // If you want to use Vite's own HTML serving logic (using Vite as + // a development middleware), using 'html' instead. const vite = await createViteServer({ - server: { middlewareMode: true } + server: { middlewareMode: 'ssr' } }) // use vite's connect instance as middleware app.use(vite.middlewares) diff --git a/packages/playground/ssr-react/server.js b/packages/playground/ssr-react/server.js index 7c0c1a81152445..6e04104181ba56 100644 --- a/packages/playground/ssr-react/server.js +++ b/packages/playground/ssr-react/server.js @@ -26,7 +26,7 @@ async function createServer( root, logLevel: isTest ? 'error' : 'info', server: { - middlewareMode: true, + middlewareMode: 'ssr', watch: { // During tests we edit the files too fast and sometimes chokidar // misses change events, so enforce polling for consistency diff --git a/packages/playground/ssr-vue/server.js b/packages/playground/ssr-vue/server.js index 4ccbc21a4816ab..642f274647294f 100644 --- a/packages/playground/ssr-vue/server.js +++ b/packages/playground/ssr-vue/server.js @@ -31,7 +31,7 @@ async function createServer( root, logLevel: isTest ? 'error' : 'info', server: { - middlewareMode: true, + middlewareMode: 'ssr', watch: { // During tests we edit the files too fast and sometimes chokidar // misses change events, so enforce polling for consistency diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 8f068b91f39129..72724ac8fb2451 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -114,7 +114,7 @@ export interface ServerOptions { /** * Create Vite dev server to be used as a middleware in an existing server */ - middlewareMode?: boolean + middlewareMode?: boolean | 'html' | 'ssr' /** * Prepend this folder to http requests, for use when proxying vite as a subfolder * Should start and end with the `/` character @@ -263,7 +263,10 @@ export async function createServer( const config = await resolveConfig(inlineConfig, 'serve', 'development') const root = config.root const serverConfig = config.server || {} - const middlewareMode = !!serverConfig.middlewareMode + let { middlewareMode } = serverConfig + if (middlewareMode === true) { + middlewareMode = 'ssr' + } const middlewares = connect() as Connect.Server const httpServer = middlewareMode @@ -442,7 +445,7 @@ export async function createServer( middlewares.use(serveStaticMiddleware(root, config)) // spa fallback - if (!middlewareMode) { + if (!middlewareMode || middlewareMode === 'html') { middlewares.use( history({ logger: createDebugger('vite:spa-fallback'), @@ -469,7 +472,7 @@ export async function createServer( // serve custom content instead of index.html. postHooks.forEach((fn) => fn && fn()) - if (!middlewareMode) { + if (!middlewareMode || middlewareMode === 'html') { // transform index.html middlewares.use(indexHtmlMiddleware(server)) // handle 404s @@ -480,7 +483,7 @@ export async function createServer( } // error handler - middlewares.use(errorMiddleware(server, middlewareMode)) + middlewares.use(errorMiddleware(server, !!middlewareMode)) const runOptimize = async () => { if (config.cacheDir) {