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 () => { 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)