Skip to content

Commit e4aab77

Browse files
refactor(remix-dev/vite): clean resolved Remix config (#8586)
1 parent 1d1d196 commit e4aab77

File tree

3 files changed

+185
-185
lines changed

3 files changed

+185
-185
lines changed

packages/remix-dev/vite/build.ts

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import fse from "fs-extra";
44
import colors from "picocolors";
55

66
import {
7-
type ResolvedVitePluginConfig,
8-
type ServerBundleBuildConfig,
7+
type RemixPluginContext,
98
type BuildManifest,
9+
type ServerBundleBuildConfig,
1010
type ServerBundlesBuildManifest,
1111
configRouteToBranchRoute,
12-
getServerBuildRootDirectory,
12+
getServerBuildDirectory,
1313
} from "./plugin";
1414
import type { ConfigRoute, RouteManifest } from "../config/routes";
1515
import invariant from "../invariant";
@@ -38,16 +38,17 @@ async function resolveViteConfig({
3838
return viteConfig;
3939
}
4040

41-
async function extractRemixConfig(viteConfig: Vite.ResolvedConfig) {
42-
let remixConfig = viteConfig[
43-
"__remixPluginResolvedConfig" as keyof typeof viteConfig
44-
] as ResolvedVitePluginConfig | undefined;
45-
if (!remixConfig) {
41+
async function extractRemixPluginContext(viteConfig: Vite.ResolvedConfig) {
42+
let ctx = viteConfig["__remixPluginContext" as keyof typeof viteConfig] as
43+
| RemixPluginContext
44+
| undefined;
45+
46+
if (!ctx) {
4647
console.error(colors.red("Remix Vite plugin not found in Vite config"));
4748
process.exit(1);
4849
}
4950

50-
return remixConfig;
51+
return ctx;
5152
}
5253

5354
function getAddressableRoutes(routes: RouteManifest): ConfigRoute[] {
@@ -102,19 +103,15 @@ type RemixViteServerBuildArgs = {
102103

103104
type RemixViteBuildArgs = RemixViteClientBuildArgs | RemixViteServerBuildArgs;
104105

105-
async function getServerBuilds(remixConfig: ResolvedVitePluginConfig): Promise<{
106+
async function getServerBuilds(ctx: RemixPluginContext): Promise<{
106107
serverBuilds: RemixViteServerBuildArgs[];
107108
buildManifest: BuildManifest;
108109
}> {
110+
let { rootDirectory } = ctx;
109111
// eslint-disable-next-line prefer-let/prefer-let -- Improve type narrowing
110-
const {
111-
routes,
112-
serverBuildFile,
113-
serverBundles,
114-
rootDirectory,
115-
appDirectory,
116-
} = remixConfig;
117-
let serverBuildRootDirectory = getServerBuildRootDirectory(remixConfig);
112+
const { routes, serverBuildFile, serverBundles, appDirectory } =
113+
ctx.remixConfig;
114+
let serverBuildDirectory = getServerBuildDirectory(ctx);
118115
if (!serverBundles) {
119116
return {
120117
serverBuilds: [{ ssr: true }],
@@ -164,7 +161,7 @@ async function getServerBuilds(remixConfig: ResolvedVitePluginConfig): Promise<{
164161

165162
let relativeServerBundleDirectory = path.relative(
166163
rootDirectory,
167-
path.join(serverBuildRootDirectory, serverBundleId)
164+
path.join(serverBuildDirectory, serverBundleId)
168165
);
169166
let serverBuildConfig = serverBundleBuildConfigById.get(serverBundleId);
170167
if (!serverBuildConfig) {
@@ -202,21 +199,18 @@ async function getServerBuilds(remixConfig: ResolvedVitePluginConfig): Promise<{
202199
};
203200
}
204201

205-
async function cleanServerBuildRootDirectory(
202+
async function cleanServerBuildDirectory(
206203
viteConfig: Vite.ResolvedConfig,
207-
remixConfig: ResolvedVitePluginConfig
204+
ctx: RemixPluginContext
208205
) {
209-
let serverBuildRootDirectory = getServerBuildRootDirectory(remixConfig);
206+
let serverBuildDirectory = getServerBuildDirectory(ctx);
210207
let isWithinRoot = () => {
211-
let relativePath = path.relative(
212-
remixConfig.rootDirectory,
213-
serverBuildRootDirectory
214-
);
208+
let relativePath = path.relative(ctx.rootDirectory, serverBuildDirectory);
215209
return !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
216210
};
217211

218212
if (viteConfig.build.emptyOutDir ?? isWithinRoot()) {
219-
await fse.remove(serverBuildRootDirectory);
213+
await fse.remove(serverBuildDirectory);
220214
}
221215
}
222216

@@ -250,7 +244,8 @@ export async function build(
250244
await preloadViteEsm();
251245

252246
let viteConfig = await resolveViteConfig({ configFile, mode, root });
253-
let remixConfig = await extractRemixConfig(viteConfig);
247+
let ctx = await extractRemixPluginContext(viteConfig);
248+
let { remixConfig } = ctx;
254249

255250
let vite = await import("vite");
256251

@@ -276,19 +271,19 @@ export async function build(
276271
// output directories, we need to clean the root server build directory
277272
// ourselves rather than relying on Vite to do it, otherwise you can end up
278273
// with stale server bundle directories in your build output
279-
await cleanServerBuildRootDirectory(viteConfig, remixConfig);
274+
await cleanServerBuildDirectory(viteConfig, ctx);
280275

281276
// Run the Vite client build first
282277
await viteBuild({ ssr: false });
283278

284279
// Then run Vite SSR builds in parallel
285-
let { serverBuilds, buildManifest } = await getServerBuilds(remixConfig);
280+
let { serverBuilds, buildManifest } = await getServerBuilds(ctx);
286281

287282
await Promise.all(serverBuilds.map(viteBuild));
288283

289-
if (remixConfig.manifest) {
284+
if (ctx.remixConfig.manifest) {
290285
await fse.writeFile(
291-
path.join(remixConfig.buildDirectory, "manifest.json"),
286+
path.join(ctx.remixConfig.buildDirectory, "manifest.json"),
292287
JSON.stringify(buildManifest, null, 2),
293288
"utf-8"
294289
);

0 commit comments

Comments
 (0)