diff --git a/.changeset/fix-module-loader-prerender-env.md b/.changeset/fix-module-loader-prerender-env.md new file mode 100644 index 000000000000..b2513b53ddf1 --- /dev/null +++ b/.changeset/fix-module-loader-prerender-env.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes the per-environment module loader returning the wrong Vite dev environment from `getSSREnvironment()`. With adapters like `@astrojs/cloudflare` configured with `prerenderEnvironment: 'node'`, a separate `prerender` Vite environment is created and a dedicated loader is built for it; the loader now correctly returns the environment it was constructed for, so `getComponentMetadata()` crawls the right module graph for prerendered routes in dev. diff --git a/packages/astro/src/core/module-loader/vite.ts b/packages/astro/src/core/module-loader/vite.ts index a5a0e250c7d6..7c02471b4319 100644 --- a/packages/astro/src/core/module-loader/vite.ts +++ b/packages/astro/src/core/module-loader/vite.ts @@ -6,7 +6,6 @@ import type { RunnableDevEnvironment } from 'vite'; import { collectErrorMetadata } from '../errors/dev/utils.js'; import { getViteErrorPayload } from '../errors/dev/vite.js'; import type { ModuleLoader, ModuleLoaderEventEmitter } from './runner.js'; -import { ASTRO_VITE_ENVIRONMENT_NAMES } from '../constants.js'; export function createViteLoader( viteServer: vite.ViteDevServer, @@ -110,7 +109,8 @@ export function createViteLoader( return viteServer.environments.client.hot.send(msg); }, getSSREnvironment() { - return viteServer.environments[ASTRO_VITE_ENVIRONMENT_NAMES.ssr] as RunnableDevEnvironment; + // Use the loader's actual environment so prerender handlers crawl the correct module graph. + return ssrEnvironment; }, isHttps() { return !!ssrEnvironment.config.server.https;