From 84c4118d5f1e73fe964d680aa316bf0fd7d5ee20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Wouts?= Date: Wed, 26 Apr 2023 15:24:02 +1000 Subject: [PATCH] fix: address file path mismatch when loading Vite config file on Windows (fix #12923) (#13005) --- packages/vite/src/node/config.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 7b4107c8aafe05..1933a5484b7565 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -2,6 +2,7 @@ import fs from 'node:fs' import fsp from 'node:fs/promises' import path from 'node:path' import { pathToFileURL } from 'node:url' +import { promisify } from 'node:util' import { performance } from 'node:perf_hooks' import { createRequire } from 'node:module' import colors from 'picocolors' @@ -69,6 +70,7 @@ import type { ResolvedSSROptions, SSROptions } from './ssr' import { resolveSSROptions } from './ssr' const debug = createDebugger('vite:config') +const promisifiedRealpath = promisify(fs.realpath) export type { RenderBuiltAssetUrl, @@ -1106,7 +1108,11 @@ async function loadConfigFromBundledFile( // for cjs, we can register a custom loader via `_require.extensions` else { const extension = path.extname(fileName) - const realFileName = await fsp.realpath(fileName) + // We don't use fsp.realpath() here because it has the same behaviour as + // fs.realpath.native. On some Windows systems, it returns uppercase volume + // letters (e.g. "C:\") while the Node.js loader uses lowercase volume letters. + // See https://github.com/vitejs/vite/issues/12923 + const realFileName = await promisifiedRealpath(fileName) const loaderExt = extension in _require.extensions ? extension : '.js' const defaultLoader = _require.extensions[loaderExt]! _require.extensions[loaderExt] = (module: NodeModule, filename: string) => {