From b11625b91b36c030b009f91a4118fc0453bb384d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 13 Sep 2021 00:19:40 -0700 Subject: [PATCH] chore: give history middleware a name (#4908) * chore: give history middleware a name * chore: move spa fallback middleware to new file * Update packages/vite/src/node/server/middlewares/spaFallback.ts Co-authored-by: patak * fix: typo * chore: better naming for impl function Co-authored-by: patak --- packages/vite/src/node/server/index.ts | 24 ++------------ .../node/server/middlewares/spaFallback.ts | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 packages/vite/src/node/server/middlewares/spaFallback.ts diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index ad95540bbff633..8f2cc9281bef18 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -15,12 +15,12 @@ import { FSWatcher, WatchOptions } from 'types/chokidar' import { createWebSocketServer, WebSocketServer } from './ws' import { baseMiddleware } from './middlewares/base' import { proxyMiddleware, ProxyOptions } from './middlewares/proxy' +import { spaFallbackMiddleware } from './middlewares/spaFallback' import { transformMiddleware } from './middlewares/transform' import { createDevHtmlTransformFn, indexHtmlMiddleware } from './middlewares/indexHtml' -import history from 'connect-history-api-fallback' import { serveRawFsMiddleware, servePublicMiddleware, @@ -29,7 +29,7 @@ import { import { timeMiddleware } from './middlewares/time' import { ModuleGraph, ModuleNode } from './moduleGraph' import { Connect } from 'types/connect' -import { createDebugger, ensureLeadingSlash, normalizePath } from '../utils' +import { ensureLeadingSlash, normalizePath } from '../utils' import { errorMiddleware, prepareError } from './middlewares/error' import { handleHMRUpdate, HmrOptions, handleFileAddUnlink } from './hmr' import { openBrowser } from './openBrowser' @@ -502,25 +502,7 @@ export async function createServer( // spa fallback if (!middlewareMode || middlewareMode === 'html') { - middlewares.use( - history({ - logger: createDebugger('vite:spa-fallback'), - // support /dir/ without explicit index.html - rewrites: [ - { - from: /\/$/, - to({ parsedUrl }: any) { - const rewritten = parsedUrl.pathname + 'index.html' - if (fs.existsSync(path.join(root, rewritten))) { - return rewritten - } else { - return `/index.html` - } - } - } - ] - }) - ) + middlewares.use(spaFallbackMiddleware(root)) } // run post config hooks diff --git a/packages/vite/src/node/server/middlewares/spaFallback.ts b/packages/vite/src/node/server/middlewares/spaFallback.ts new file mode 100644 index 00000000000000..73c0ad8cb2e92f --- /dev/null +++ b/packages/vite/src/node/server/middlewares/spaFallback.ts @@ -0,0 +1,32 @@ +import fs from 'fs' +import history from 'connect-history-api-fallback' +import path from 'path' +import { Connect } from 'types/connect' +import { createDebugger } from '../../utils' + +export function spaFallbackMiddleware( + root: string +): Connect.NextHandleFunction { + const historySpaFallbackMiddleware = history({ + logger: createDebugger('vite:spa-fallback'), + // support /dir/ without explicit index.html + rewrites: [ + { + from: /\/$/, + to({ parsedUrl }: any) { + const rewritten = parsedUrl.pathname + 'index.html' + if (fs.existsSync(path.join(root, rewritten))) { + return rewritten + } else { + return `/index.html` + } + } + } + ] + }) + + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + return function viteSpaFallbackMiddleware(req, res, next) { + return historySpaFallbackMiddleware(req, res, next) + } +}