From fdf889dff3d73c34b573aa3867d59028038dd10a Mon Sep 17 00:00:00 2001 From: Alec Larson <1925840+aleclarson@users.noreply.github.com> Date: Sat, 24 Jul 2021 22:12:33 -0400 Subject: [PATCH] feat: ask `load` hooks for index.html before reading from filesystem --- .../src/node/server/middlewares/indexHtml.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 968b210abe1c5e..2a998a418a3673 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -13,7 +13,7 @@ import { import { ResolvedConfig, ViteDevServer } from '../..' import { send } from '../send' import { CLIENT_PUBLIC_PATH, FS_PREFIX } from '../../constants' -import { cleanUrl, fsPathFromId } from '../../utils' +import { cleanUrl, fsPathFromId, normalizePath } from '../../utils' import { assetAttrsConfig } from '../../plugins/html' export function createDevHtmlTransformFn( @@ -35,7 +35,7 @@ function getHtmlFilename(url: string, server: ViteDevServer) { if (url.startsWith(FS_PREFIX)) { return fsPathFromId(url) } else { - return path.join(server.config.root, url.slice(1)) + return normalizePath(path.join(server.config.root, url.slice(1))) } } @@ -155,14 +155,18 @@ export function indexHtmlMiddleware( // spa-fallback always redirects to /index.html if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') { const filename = getHtmlFilename(url, server) - if (fs.existsSync(filename)) { - try { - let html = fs.readFileSync(filename, 'utf-8') - html = await server.transformIndexHtml(url, html, req.originalUrl) - return send(req, res, html, 'html') - } catch (e) { - return next(e) - } + try { + const loadResult = await server.pluginContainer.load(filename) + const html = await server.transformIndexHtml( + url, + (loadResult && + (typeof loadResult === 'string' ? loadResult : loadResult.code)) || + fs.readFileSync(filename, 'utf-8'), + req.originalUrl + ) + return send(req, res, html, 'html') + } catch (e) { + return next(e) } } next()