From 1635fa6b73d23c1e9ca94248d742d9c224744ab2 Mon Sep 17 00:00:00 2001 From: candy-Tong <563378816@qq.com> Date: Sat, 19 Nov 2022 11:40:14 +0800 Subject: [PATCH 1/6] fix: transform relative path uncorrectly in /index.html #10989 --- packages/vite/src/node/server/middlewares/indexHtml.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 3c57832db0fd20..2e4e358d42c453 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -102,12 +102,7 @@ const processNodeUrl = ( originalUrl !== '/' && htmlPath === '/index.html' ) { - const replacer = (url: string) => - path.posix.join( - devBase, - path.posix.relative(originalUrl, devBase), - url.slice(1) - ) + const replacer = (url: string) => path.posix.join(devBase, url.slice(1)) // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets // path will add `/a/` prefix, it will caused 404. From 9e20581f41bc91da2e9e62a1e8c9483cd4c1a9da Mon Sep 17 00:00:00 2001 From: candy-Tong <563378816@qq.com> Date: Sun, 20 Nov 2022 20:40:27 +0800 Subject: [PATCH 2/6] refactor: add comments --- packages/vite/src/node/server/middlewares/indexHtml.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 2e4e358d42c453..b45e4ebfc662c6 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -102,6 +102,9 @@ const processNodeUrl = ( originalUrl !== '/' && htmlPath === '/index.html' ) { + // #10990 config.base './' or '' will be changed to `/` in dev mode + // this function is only run in dev mode and config.base is always to be an absolute path. + // we needn't handle config.base './' or '' const replacer = (url: string) => path.posix.join(devBase, url.slice(1)) // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets From c38a69f2c1bd011f365d4f1240e9b73177dc56e2 Mon Sep 17 00:00:00 2001 From: Candy <563378816@qq.com> Date: Sun, 20 Nov 2022 23:09:05 +0800 Subject: [PATCH 3/6] refactor: remove url.slice Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- packages/vite/src/node/server/middlewares/indexHtml.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index b45e4ebfc662c6..acfe4f8f1d53e2 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -105,7 +105,7 @@ const processNodeUrl = ( // #10990 config.base './' or '' will be changed to `/` in dev mode // this function is only run in dev mode and config.base is always to be an absolute path. // we needn't handle config.base './' or '' - const replacer = (url: string) => path.posix.join(devBase, url.slice(1)) + const replacer = (url: string) => path.posix.join(devBase, url) // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets // path will add `/a/` prefix, it will caused 404. From 1b8f757f3c30e6ef5679cc905e56e4f8a54401fe Mon Sep 17 00:00:00 2001 From: candy-Tong <563378816@qq.com> Date: Tue, 22 Nov 2022 12:18:23 +0800 Subject: [PATCH 4/6] test: add trailing slash to base --- packages/vite/src/node/__tests__/utils.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/vite/src/node/__tests__/utils.spec.ts b/packages/vite/src/node/__tests__/utils.spec.ts index fbd0b208b8200a..77f0b8a34f7c57 100644 --- a/packages/vite/src/node/__tests__/utils.spec.ts +++ b/packages/vite/src/node/__tests__/utils.spec.ts @@ -1,4 +1,5 @@ import fs from 'node:fs' +import path from 'node:path' import { describe, expect, test } from 'vitest' import { asyncFlatten, @@ -9,6 +10,7 @@ import { isFileReadable, isWindows, posToNumber, + processSrcSetSync, resolveHostname, shouldServe } from '../utils' @@ -270,3 +272,15 @@ describe('isFileReadable', () => { }) } }) + +describe('processSrcSetSync', () => { + test('replace srcset with base url /base/', async () => { + const devBase = '/base/' + expect( + processSrcSetSync( + './nested/asset.png 1x, ./nested/asset.png 2x', + ({ url }) => path.posix.join(devBase, url) + ) + ).toBe('/base/nested/asset.png 1x, /base/nested/asset.png 2x') + }) +}) From 6144c50a47552dccb600b1dab303689915b26fd6 Mon Sep 17 00:00:00 2001 From: candy-Tong <563378816@qq.com> Date: Tue, 22 Nov 2022 12:29:43 +0800 Subject: [PATCH 5/6] refactor: use path.posix.join when starts with single slash --- packages/vite/src/node/server/middlewares/indexHtml.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index acfe4f8f1d53e2..14711ee7e767be 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -94,7 +94,7 @@ const processNodeUrl = ( const devBase = config.base if (startsWithSingleSlashRE.test(url)) { // prefix with base (dev only, base is never relative) - const fullUrl = joinUrlSegments(devBase, url) + const fullUrl = path.posix.join(devBase, url) overwriteAttrValue(s, sourceCodeLocation, fullUrl) } else if ( url.startsWith('.') && @@ -102,9 +102,7 @@ const processNodeUrl = ( originalUrl !== '/' && htmlPath === '/index.html' ) { - // #10990 config.base './' or '' will be changed to `/` in dev mode - // this function is only run in dev mode and config.base is always to be an absolute path. - // we needn't handle config.base './' or '' + // prefix with base (dev only, base is never relative) const replacer = (url: string) => path.posix.join(devBase, url) // #3230 if some request url (localhost:3000/a/b) return to fallback html, the relative assets From 80e070e6114d46eed834f7cfaaa92b6c3a24a5b3 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Tue, 22 Nov 2022 13:34:20 +0800 Subject: [PATCH 6/6] chore: update test name Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- packages/vite/src/node/__tests__/utils.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/__tests__/utils.spec.ts b/packages/vite/src/node/__tests__/utils.spec.ts index 77f0b8a34f7c57..5560379743bc33 100644 --- a/packages/vite/src/node/__tests__/utils.spec.ts +++ b/packages/vite/src/node/__tests__/utils.spec.ts @@ -274,7 +274,7 @@ describe('isFileReadable', () => { }) describe('processSrcSetSync', () => { - test('replace srcset with base url /base/', async () => { + test('prepend base URL to srcset', async () => { const devBase = '/base/' expect( processSrcSetSync(