@@ -48,16 +48,19 @@ export async function build(root: string, viteBuildOptions: ViteBuildOptions) {
48
48
}
49
49
50
50
let config = configResult . value ;
51
- let unstable_viteEnvironmentApi = config . future . unstable_viteEnvironmentApi ;
52
- let viteMajor = parseInt ( vite . version . split ( "." ) [ 0 ] , 10 ) ;
53
51
54
- if ( unstable_viteEnvironmentApi && viteMajor === 5 ) {
52
+ let viteMajor = parseInt ( vite . version . split ( "." ) [ 0 ] , 10 ) ;
53
+ if ( config . future . unstable_viteEnvironmentApi && viteMajor === 5 ) {
55
54
throw new Error (
56
55
"The future.unstable_viteEnvironmentApi option is not supported in Vite 5" ,
57
56
) ;
58
57
}
59
58
60
- return await ( unstable_viteEnvironmentApi
59
+ const useViteEnvironmentApi =
60
+ config . future . unstable_viteEnvironmentApi ||
61
+ ( await hasReactRouterRscPlugin ( { root, viteBuildOptions } ) ) ;
62
+
63
+ return await ( useViteEnvironmentApi
61
64
? viteAppBuild ( root , viteBuildOptions )
62
65
: viteBuild ( root , viteBuildOptions ) ) ;
63
66
}
@@ -231,3 +234,27 @@ async function viteBuild(
231
234
viteConfig,
232
235
} ) ;
233
236
}
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