Skip to content

Commit 31675e3

Browse files
authored
fix(vite-node): properly normalize file url import (#7087)
1 parent f9a6284 commit 31675e3

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

packages/vite-node/src/utils.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,14 @@ export function normalizeRequestId(id: string, base?: string): string {
3535
id = id.replace(driveOppositeRegext, `${drive}$1`)
3636
}
3737

38+
if (id.startsWith('file://')) {
39+
return fileURLToPath(id)
40+
}
41+
3842
return id
3943
.replace(/^\/@id\/__x00__/, '\0') // virtual modules start with `\0`
4044
.replace(/^\/@id\//, '')
4145
.replace(/^__vite-browser-external:/, '')
42-
.replace(/^file:(\/+)/, isWindows ? '' : '/') // remove file protocol and duplicate leading slashes
4346
.replace(/\?v=\w+/, '?') // remove ?v= query
4447
.replace(/&v=\w+/, '') // remove &v= query
4548
.replace(/\?t=\w+/, '?') // remove ?t= query
@@ -89,10 +92,12 @@ export function normalizeModuleId(id: string) {
8992
if (prefixedBuiltins.has(id)) {
9093
return id
9194
}
95+
if (id.startsWith('file://')) {
96+
return fileURLToPath(id)
97+
}
9298
return id
9399
.replace(/\\/g, '/')
94100
.replace(/^\/@fs\//, isWindows ? '' : '/')
95-
.replace(/^file:\//, '/')
96101
.replace(/^node:/, '')
97102
.replace(/^\/+/, '/')
98103
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { expect, test } from 'vitest'
2+
3+
test('resolve file url', async () => {
4+
const fileUrl = new URL('./resolve-file-url%7Edep.js', import.meta.url).href
5+
const mod = await import(fileUrl)
6+
expect(mod.default).toMatchInlineSnapshot(`"[ok]"`)
7+
})
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default '[ok]'

0 commit comments

Comments
 (0)