diff --git a/packages/vite/src/node/plugins/html.ts b/packages/vite/src/node/plugins/html.ts index b76c36dbda71df..57e11943aac283 100644 --- a/packages/vite/src/node/plugins/html.ts +++ b/packages/vite/src/node/plugins/html.ts @@ -97,7 +97,7 @@ export function htmlInlineProxyPlugin(config: ResolvedConfig): Plugin { const index = Number(proxyMatch[1]) const file = cleanUrl(id) const url = file.replace(normalizePath(config.root), '') - const result = htmlProxyMap.get(config)!.get(url)![index] + const result = htmlProxyMap.get(config)!.get(url)?.[index] if (result) { return result } else { diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 9de3d1f7c7b548..3948f997a3bb91 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -150,6 +150,7 @@ const devHtmlHook: IndexHtmlTransformHook = async ( ) => { const { config, moduleGraph, watcher } = server! const base = config.base || '/' + htmlPath = decodeURI(htmlPath) let proxyModulePath: string let proxyModuleUrl: string diff --git a/playground/html/__tests__/html.spec.ts b/playground/html/__tests__/html.spec.ts index 144fcfe1d0003a..6d66fa7622a5f3 100644 --- a/playground/html/__tests__/html.spec.ts +++ b/playground/html/__tests__/html.spec.ts @@ -303,3 +303,13 @@ describe('side-effects', () => { expect(browserLogs).toContain('message from sideEffects script') }) }) + +describe('special character', () => { + beforeAll(async () => { + await page.goto(viteTestUrl + '/a á.html') + }) + + test('should fetch html proxy', async () => { + expect(browserLogs).toContain('special character') + }) +}) diff --git "a/playground/html/a \303\241.html" "b/playground/html/a \303\241.html" new file mode 100644 index 00000000000000..5a3c9ae4e1a28a --- /dev/null +++ "b/playground/html/a \303\241.html" @@ -0,0 +1,5 @@ +