Skip to content

Commit 1669bb6

Browse files
committed
Resolve build manifest during user config extraction
1 parent 84008da commit 1669bb6

File tree

2 files changed

+34
-35
lines changed

2 files changed

+34
-35
lines changed

packages/react-router-dev/vite/build.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,9 @@ async function viteBuild(
189189
});
190190
}
191191

192-
let { reactRouterConfig } = ctx;
193-
let buildManifest = await getBuildManifest(ctx);
192+
let { reactRouterConfig, buildManifest } = ctx;
194193
let environmentOptionsResolvers = await getEnvironmentOptionsResolvers(
195194
ctx,
196-
buildManifest,
197195
"build"
198196
);
199197
let environmentsOptions = resolveEnvironmentsOptions(

packages/react-router-dev/vite/plugin.ts

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ type ReactRouterPluginContext = {
248248
publicPath: string;
249249
reactRouterConfig: ResolvedReactRouterConfig;
250250
viteManifestEnabled: boolean;
251+
buildManifest: BuildManifest;
251252
};
252253

253254
let virtualHmrRuntime = VirtualModule.create("hmr-runtime");
@@ -510,11 +511,11 @@ const resolveEnvironmentBuildContext = ({
510511
};
511512

512513
let getServerBuildDirectory = (
513-
ctx: ReactRouterPluginContext,
514+
reactRouterConfig: ResolvedReactRouterConfig,
514515
{ serverBundleId }: { serverBundleId?: string } = {}
515516
) =>
516517
path.join(
517-
ctx.reactRouterConfig.buildDirectory,
518+
reactRouterConfig.buildDirectory,
518519
"server",
519520
...(serverBundleId ? [serverBundleId] : [])
520521
);
@@ -649,6 +650,11 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
649650
? resolveEnvironmentBuildContext({ viteCommand, viteUserConfig })
650651
: null;
651652

653+
buildManifest =
654+
ctx?.buildManifest ??
655+
ctx?.environmentBuildContext?.buildManifest ??
656+
(await getBuildManifest({ reactRouterConfig, rootDirectory }));
657+
652658
firstLoad = false;
653659

654660
ctx = {
@@ -659,6 +665,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
659665
entryServerFilePath,
660666
publicPath,
661667
viteManifestEnabled,
668+
buildManifest,
662669
};
663670
};
664671

@@ -1116,12 +1123,6 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
11161123
});
11171124

11181125
await updatePluginContext();
1119-
buildManifest =
1120-
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ||
1121-
viteCommand === "serve"
1122-
? await getBuildManifest(ctx)
1123-
: ctx.environmentBuildContext?.buildManifest;
1124-
invariant(buildManifest);
11251126

11261127
Object.assign(
11271128
process.env,
@@ -1135,16 +1136,13 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
11351136
)
11361137
);
11371138

1138-
let environments = await getEnvironmentsOptions(
1139-
ctx,
1140-
buildManifest,
1141-
viteCommand,
1142-
{ viteUserConfig }
1143-
);
1139+
let environments = await getEnvironmentsOptions(ctx, viteCommand, {
1140+
viteUserConfig,
1141+
});
11441142

11451143
let serverEnvironment = getServerEnvironmentValues(
11461144
environments,
1147-
buildManifest
1145+
ctx.buildManifest
11481146
)[0];
11491147
invariant(serverEnvironment);
11501148

@@ -1564,7 +1562,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
15641562
let serverBuildDirectory = future.unstable_viteEnvironmentApi
15651563
? this.environment.config?.build?.outDir
15661564
: ctx.environmentBuildContext?.options.build?.outDir ??
1567-
getServerBuildDirectory(ctx);
1565+
getServerBuildDirectory(ctx.reactRouterConfig);
15681566

15691567
let ssrViteManifest = await loadViteManifest(serverBuildDirectory);
15701568
let ssrAssetPaths = getViteManifestAssetPaths(ssrViteManifest);
@@ -3156,23 +3154,27 @@ export async function cleanViteManifests(
31563154
);
31573155
}
31583156

3159-
export async function getBuildManifest(
3160-
ctx: ReactRouterPluginContext
3161-
): Promise<BuildManifest> {
3162-
let { routes, serverBundles, appDirectory } = ctx.reactRouterConfig;
3157+
export async function getBuildManifest({
3158+
reactRouterConfig,
3159+
rootDirectory,
3160+
}: {
3161+
reactRouterConfig: ResolvedReactRouterConfig;
3162+
rootDirectory: string;
3163+
}): Promise<BuildManifest> {
3164+
let { routes, serverBundles, appDirectory } = reactRouterConfig;
31633165

31643166
if (!serverBundles) {
31653167
return { routes };
31663168
}
31673169

31683170
let { normalizePath } = await import("vite");
3169-
let serverBuildDirectory = getServerBuildDirectory(ctx);
3170-
let resolvedAppDirectory = path.resolve(ctx.rootDirectory, appDirectory);
3171+
let serverBuildDirectory = getServerBuildDirectory(reactRouterConfig);
3172+
let resolvedAppDirectory = path.resolve(rootDirectory, appDirectory);
31713173
let rootRelativeRoutes = Object.fromEntries(
31723174
Object.entries(routes).map(([id, route]) => {
31733175
let filePath = path.join(resolvedAppDirectory, route.file);
31743176
let rootRelativeFilePath = normalizePath(
3175-
path.relative(ctx.rootDirectory, filePath)
3177+
path.relative(rootDirectory, filePath)
31763178
);
31773179
return [id, { ...route, file: rootRelativeFilePath }];
31783180
})
@@ -3199,7 +3201,7 @@ export async function getBuildManifest(
31993201
if (typeof serverBundleId !== "string") {
32003202
throw new Error(`The "serverBundles" function must return a string`);
32013203
}
3202-
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi) {
3204+
if (reactRouterConfig.future.unstable_viteEnvironmentApi) {
32033205
// Server bundle IDs must be valid Vite environment names, so hyphens are not allowed
32043206
if (!/^[a-zA-Z0-9_]+$/.test(serverBundleId)) {
32053207
throw new Error(
@@ -3220,10 +3222,10 @@ export async function getBuildManifest(
32203222
file: normalizePath(
32213223
path.join(
32223224
path.relative(
3223-
ctx.rootDirectory,
3225+
rootDirectory,
32243226
path.join(serverBuildDirectory, serverBundleId)
32253227
),
3226-
ctx.reactRouterConfig.serverBuildFile
3228+
reactRouterConfig.serverBuildFile
32273229
)
32283230
),
32293231
};
@@ -3247,7 +3249,6 @@ function mergeEnvironmentOptions(
32473249

32483250
export async function getEnvironmentOptionsResolvers(
32493251
ctx: ReactRouterPluginContext,
3250-
buildManifest: BuildManifest,
32513252
viteCommand: Vite.ResolvedConfig["command"]
32523253
): Promise<EnvironmentOptionsResolvers> {
32533254
let { serverBuildFile, serverModuleFormat } = ctx.reactRouterConfig;
@@ -3404,7 +3405,7 @@ export async function getEnvironmentOptionsResolvers(
34043405
}),
34053406
};
34063407

3407-
let serverBundleIds = getServerBundleIds(buildManifest);
3408+
let serverBundleIds = getServerBundleIds(ctx.buildManifest);
34083409
if (serverBundleIds) {
34093410
for (let serverBundleId of serverBundleIds) {
34103411
const environmentName = `${SSR_BUNDLE_PREFIX}${serverBundleId}` as const;
@@ -3413,7 +3414,9 @@ export async function getEnvironmentOptionsResolvers(
34133414
getBaseServerOptions({ viteUserConfig }),
34143415
{
34153416
build: {
3416-
outDir: getServerBuildDirectory(ctx, { serverBundleId }),
3417+
outDir: getServerBuildDirectory(ctx.reactRouterConfig, {
3418+
serverBundleId,
3419+
}),
34173420
},
34183421
},
34193422
// Ensure server bundle environments extend the user's SSR
@@ -3425,7 +3428,7 @@ export async function getEnvironmentOptionsResolvers(
34253428
environmentOptionsResolvers.ssr = ({ viteUserConfig }) =>
34263429
mergeEnvironmentOptions(getBaseServerOptions({ viteUserConfig }), {
34273430
build: {
3428-
outDir: getServerBuildDirectory(ctx),
3431+
outDir: getServerBuildDirectory(ctx.reactRouterConfig),
34293432
},
34303433
optimizeDeps:
34313434
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi &&
@@ -3473,13 +3476,11 @@ export function resolveEnvironmentsOptions(
34733476

34743477
async function getEnvironmentsOptions(
34753478
ctx: ReactRouterPluginContext,
3476-
buildManifest: BuildManifest,
34773479
viteCommand: Vite.ResolvedConfig["command"],
34783480
resolverOptions: Parameters<EnvironmentOptionsResolver>[0]
34793481
): Promise<Record<string, EnvironmentOptions>> {
34803482
let environmentOptionsResolvers = await getEnvironmentOptionsResolvers(
34813483
ctx,
3482-
buildManifest,
34833484
viteCommand
34843485
);
34853486
return resolveEnvironmentsOptions(

0 commit comments

Comments
 (0)