@@ -48,16 +48,19 @@ export async function build(root: string, viteBuildOptions: ViteBuildOptions) {
4848 }
4949
5050 let config = configResult . value ;
51- let unstable_viteEnvironmentApi = config . future . unstable_viteEnvironmentApi ;
52- let viteMajor = parseInt ( vite . version . split ( "." ) [ 0 ] , 10 ) ;
5351
54- if ( unstable_viteEnvironmentApi && viteMajor === 5 ) {
52+ let viteMajor = parseInt ( vite . version . split ( "." ) [ 0 ] , 10 ) ;
53+ if ( config . future . unstable_viteEnvironmentApi && viteMajor === 5 ) {
5554 throw new Error (
5655 "The future.unstable_viteEnvironmentApi option is not supported in Vite 5" ,
5756 ) ;
5857 }
5958
60- return await ( unstable_viteEnvironmentApi
59+ const useViteEnvironmentApi =
60+ config . future . unstable_viteEnvironmentApi ||
61+ ( await hasReactRouterRscPlugin ( { root, viteBuildOptions } ) ) ;
62+
63+ return await ( useViteEnvironmentApi
6164 ? viteAppBuild ( root , viteBuildOptions )
6265 : viteBuild ( root , viteBuildOptions ) ) ;
6366}
@@ -231,3 +234,27 @@ async function viteBuild(
231234 viteConfig,
232235 } ) ;
233236}
237+
238+ async function hasReactRouterRscPlugin ( {
239+ root,
240+ viteBuildOptions : { config, logLevel, mode } ,
241+ } : {
242+ root : string ;
243+ viteBuildOptions : ViteBuildOptions ;
244+ } ) : Promise < boolean > {
245+ const vite = await import ( "vite" ) ;
246+ const viteConfig = await vite . resolveConfig (
247+ {
248+ configFile : config ,
249+ logLevel,
250+ mode : mode ?? "production" ,
251+ root,
252+ } ,
253+ "build" , // command
254+ "production" , // default mode
255+ "production" , // default NODE_ENV
256+ ) ;
257+ return viteConfig . plugins . some (
258+ ( plugin ) => plugin ?. name === "react-router/rsc" ,
259+ ) ;
260+ }
0 commit comments