diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 01ec7b083..dd6110169 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -233,6 +233,15 @@ export type RscPluginOptions = { */ customBuildApp?: boolean + /** + * Enable build-time server reference discovery for "use server" actions. + * Downstream frameworks that can prove an app contains no server actions may + * set this to false to skip the SSR scan build. + * @experimental + * @default true + */ + serverReferences?: boolean + /** * Custom environment configuration * @experimental @@ -412,13 +421,17 @@ export default function vitePluginRsc( // rsc -> ssr -> rsc -> client -> ssr ensureEnvironmentImportsEntryFallback(builder.config) - manager.isScanBuild = true - builder.environments.rsc!.config.build.write = false - builder.environments.ssr!.config.build.write = false - logStep('[1/5] analyze client references...') - await builder.build(builder.environments.rsc!) - logStep('[2/5] analyze server references...') - await builder.build(builder.environments.ssr!) + if (rscPluginOptions.serverReferences !== false) { + manager.isScanBuild = true + builder.environments.rsc!.config.build.write = false + builder.environments.ssr!.config.build.write = false + logStep('[1/5] analyze client references...') + await builder.build(builder.environments.rsc!) + logStep('[2/5] analyze server references...') + await builder.build(builder.environments.ssr!) + } else { + logStep('[1/5] skip reference analysis...') + } manager.isScanBuild = false builder.environments.rsc!.config.build.write = true builder.environments.ssr!.config.build.write = true