From e51a763a133c9a2f6968fd8ee4d3fdf5fbaf9c75 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sat, 8 Mar 2025 07:37:30 +0000 Subject: [PATCH] fix(nuxt): restore nuxt aliases to nitro compilerOptions.paths (#31278) --- packages/nuxt/src/core/nitro.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index da3ea0250b..3462e6bdba 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -453,6 +453,31 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Extend nitro config with hook await nuxt.callHook('nitro:config', nitroConfig) + // TODO: extract to shared utility? + const excludedAlias = [/^@vue\/.*$/, 'vue', /vue-router/, 'vite/client', '#imports', 'vue-demi', /^#app/, '~', '@', '~~', '@@'] + const basePath = nitroConfig.typescript!.tsConfig!.compilerOptions?.baseUrl ? resolve(nuxt.options.buildDir, nitroConfig.typescript!.tsConfig!.compilerOptions?.baseUrl) : nuxt.options.buildDir + const aliases = nitroConfig.alias! + const tsConfig = nitroConfig.typescript!.tsConfig! + tsConfig.compilerOptions ||= {} + tsConfig.compilerOptions.paths ||= {} + for (const _alias in aliases) { + const alias = _alias as keyof typeof aliases + if (excludedAlias.some(pattern => typeof pattern === 'string' ? alias === pattern : pattern.test(alias))) { + continue + } + if (alias in tsConfig.compilerOptions.paths) { + continue + } + + const absolutePath = resolve(basePath, aliases[alias]!) + const stats = await fsp.stat(absolutePath).catch(() => null /* file does not exist */) + // note - nitro will check + remove the file extension as required + tsConfig.compilerOptions.paths[alias] = [absolutePath] + if (stats?.isDirectory()) { + tsConfig.compilerOptions.paths[`${alias}/*`] = [`${absolutePath}/*`] + } + } + // Init nitro const nitro = await createNitro(nitroConfig, { compatibilityDate: nuxt.options.compatibilityDate,