diff --git a/packages/vite-node/src/utils.ts b/packages/vite-node/src/utils.ts index b7673bb1c804..54931c2eed08 100644 --- a/packages/vite-node/src/utils.ts +++ b/packages/vite-node/src/utils.ts @@ -37,8 +37,7 @@ export function normalizeRequestId(id: string, base?: string): string { .replace(/^\/@id\/__x00__/, '\0') // virtual modules start with `\0` .replace(/^\/@id\//, '') .replace(/^__vite-browser-external:/, '') - .replace(/^file:/, '') - .replace(/^\/+/, '/') // remove duplicate leading slashes + .replace(/^file:(\/+)/, isWindows ? '' : '/') // remove file protocol and duplicate leading slashes .replace(/\?v=\w+/, '?') // remove ?v= query .replace(/&v=\w+/, '') // remove &v= query .replace(/\?t=\w+/, '?') // remove ?t= query diff --git a/test/core/test/write-file-dynamic-import.test.ts b/test/core/test/write-file-dynamic-import.test.ts new file mode 100644 index 000000000000..46cdaa2971a4 --- /dev/null +++ b/test/core/test/write-file-dynamic-import.test.ts @@ -0,0 +1,15 @@ +import { unlinkSync, writeFileSync } from 'node:fs' +import { pathToFileURL } from 'node:url' +import { afterEach, expect, it } from 'vitest' + +const filename = 'bar.js' + +afterEach(() => unlinkSync(filename)) + +it('write file and import created file it should return created content.', async () => { + writeFileSync(filename, 'export default 123') + + const mod = await import(pathToFileURL(filename).href) + + expect(mod.default).toBe(123) +})