Skip to content

Commit d1e1b24

Browse files
authored
fix(resolve): preserve hash/search of file url (#19300)
1 parent e8c783f commit d1e1b24

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

Diff for: packages/vite/src/node/__tests__/resolve.spec.ts

+26
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,24 @@ describe('file url', () => {
8080
export default dep;
8181
`
8282
}
83+
if (id === '\0virtual:test-dep/static-postfix') {
84+
return `
85+
import * as dep from ${JSON.stringify(fileUrl.href + '?query=test')};
86+
export default dep;
87+
`
88+
}
8389
if (id === '\0virtual:test-dep/non-static') {
8490
return `
8591
const dep = await import(/* @vite-ignore */ String(${JSON.stringify(fileUrl.href)}));
8692
export default dep;
8793
`
8894
}
95+
if (id === '\0virtual:test-dep/non-static-postfix') {
96+
return `
97+
const dep = await import(/* @vite-ignore */ String(${JSON.stringify(fileUrl.href + '?query=test')}));
98+
export default dep;
99+
`
100+
}
89101
},
90102
},
91103
],
@@ -114,6 +126,20 @@ describe('file url', () => {
114126

115127
const mod4 = await runner.import('virtual:test-dep/non-static')
116128
expect(mod4.default).toBe(mod)
129+
130+
const mod5 = await runner.import(fileUrl.href + '?query=test')
131+
expect(mod5).toEqual(mod)
132+
expect(mod5).not.toBe(mod)
133+
134+
const mod6 = await runner.import('virtual:test-dep/static-postfix')
135+
expect(mod6.default).toEqual(mod)
136+
expect(mod6.default).not.toBe(mod)
137+
expect(mod6.default).toBe(mod5)
138+
139+
const mod7 = await runner.import('virtual:test-dep/non-static-postfix')
140+
expect(mod7.default).toEqual(mod)
141+
expect(mod7.default).not.toBe(mod)
142+
expect(mod7.default).toBe(mod5)
117143
})
118144

119145
describe('environment builtins', () => {

Diff for: packages/vite/src/node/plugins/resolve.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,10 @@ export function resolvePlugin(
327327
}
328328
}
329329

330-
// file url as path
330+
// file url to path with preserving hash/search
331331
if (id.startsWith('file://')) {
332-
id = fileURLToPath(id)
332+
const { file, postfix } = splitFileAndPostfix(id)
333+
id = fileURLToPath(file) + postfix
333334
}
334335

335336
// drive relative fs paths (only windows)

0 commit comments

Comments
 (0)