From a15f12bd1d03be53237e204dbbfe71d9fcd767f1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 27 Jan 2025 15:07:49 +0900 Subject: [PATCH 1/2] fix(resolve): preserve hash/search of file url --- packages/vite/src/node/plugins/resolve.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 2306a2600a1c50..a211377dbf47e1 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -345,9 +345,10 @@ export function resolvePlugin( } } - // file url as path + // file url to path with preserving hash/search if (id.startsWith('file://')) { - id = fileURLToPath(id) + const { file, postfix } = splitFileAndPostfix(id) + id = fileURLToPath(file) + postfix } // drive relative fs paths (only windows) From 617dae87fd573ae9ae6f98e377f34f2a25ef3c39 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 27 Jan 2025 15:28:30 +0900 Subject: [PATCH 2/2] test: add test --- .../vite/src/node/__tests__/resolve.spec.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/vite/src/node/__tests__/resolve.spec.ts b/packages/vite/src/node/__tests__/resolve.spec.ts index 111cdb99a6b1a0..130ff027eb1858 100644 --- a/packages/vite/src/node/__tests__/resolve.spec.ts +++ b/packages/vite/src/node/__tests__/resolve.spec.ts @@ -80,12 +80,24 @@ describe('file url', () => { export default dep; ` } + if (id === '\0virtual:test-dep/static-postfix') { + return ` + import * as dep from ${JSON.stringify(fileUrl.href + '?query=test')}; + export default dep; + ` + } if (id === '\0virtual:test-dep/non-static') { return ` const dep = await import(/* @vite-ignore */ String(${JSON.stringify(fileUrl.href)})); export default dep; ` } + if (id === '\0virtual:test-dep/non-static-postfix') { + return ` + const dep = await import(/* @vite-ignore */ String(${JSON.stringify(fileUrl.href + '?query=test')})); + export default dep; + ` + } }, }, ], @@ -114,6 +126,20 @@ describe('file url', () => { const mod4 = await runner.import('virtual:test-dep/non-static') expect(mod4.default).toBe(mod) + + const mod5 = await runner.import(fileUrl.href + '?query=test') + expect(mod5).toEqual(mod) + expect(mod5).not.toBe(mod) + + const mod6 = await runner.import('virtual:test-dep/static-postfix') + expect(mod6.default).toEqual(mod) + expect(mod6.default).not.toBe(mod) + expect(mod6.default).toBe(mod5) + + const mod7 = await runner.import('virtual:test-dep/non-static-postfix') + expect(mod7.default).toEqual(mod) + expect(mod7.default).not.toBe(mod) + expect(mod7.default).toBe(mod5) }) test('build', async () => {