From c0d9dd9d60eef978890802308eb37f03f94ff7e0 Mon Sep 17 00:00:00 2001 From: James Opstad <13586373+jamesopstad@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:31:31 +0000 Subject: [PATCH 1/7] Added conditional optimizeDeps config for ssr environment --- packages/react-router-dev/vite/plugin.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/react-router-dev/vite/plugin.ts b/packages/react-router-dev/vite/plugin.ts index 243b1d441f..084a61f075 100644 --- a/packages/react-router-dev/vite/plugin.ts +++ b/packages/react-router-dev/vite/plugin.ts @@ -122,7 +122,10 @@ export type EnvironmentName = "client" | SsrEnvironmentName; const SSR_BUNDLE_PREFIX = "ssrBundle_"; type SsrEnvironmentName = "ssr" | `${typeof SSR_BUNDLE_PREFIX}${string}`; -type EnvironmentOptions = Pick; +type EnvironmentOptions = Pick< + Vite.EnvironmentOptions, + "build" | "resolve" | "optimizeDeps" +>; type EnvironmentOptionsResolver = (options: { viteUserConfig: Vite.UserConfig; @@ -3155,6 +3158,23 @@ export async function getEnvironmentOptionsResolvers( virtual.serverBuild.id, }, }, + optimizeDeps: + viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false + ? { + entries: [ + vite.normalizePath(ctx.entryServerFilePath), + ...Object.values(ctx.reactRouterConfig.routes).map((route) => + resolveRelativeRouteFilePath(route, ctx.reactRouterConfig) + ), + ], + include: [ + "react", + "react/jsx-dev-runtime", + "react-dom/server", + "react-router", + ], + } + : undefined, }); } From 9db33f0087e5a800a0c6b6db7fa6c115d4007e26 Mon Sep 17 00:00:00 2001 From: James Opstad <13586373+jamesopstad@users.noreply.github.com> Date: Tue, 11 Feb 2025 18:50:58 +0000 Subject: [PATCH 2/7] Added cacheDir to Vite child compiler to avoid conflicts --- packages/react-router-dev/vite/plugin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-router-dev/vite/plugin.ts b/packages/react-router-dev/vite/plugin.ts index 084a61f075..ddd42be830 100644 --- a/packages/react-router-dev/vite/plugin.ts +++ b/packages/react-router-dev/vite/plugin.ts @@ -1169,6 +1169,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => { viteChildCompiler = await vite.createServer({ ...viteUserConfig, + cacheDir: "node_modules/.vite-child-compiler", mode: viteConfig.mode, server: { watch: viteConfig.command === "build" ? null : undefined, From 5b1a04caa916c4cf0d398352e63186fc1fa082df Mon Sep 17 00:00:00 2001 From: James Opstad <13586373+jamesopstad@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:48:08 +0000 Subject: [PATCH 3/7] Added plugin to child compiler to override optimizeDeps --- packages/react-router-dev/vite/plugin.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/react-router-dev/vite/plugin.ts b/packages/react-router-dev/vite/plugin.ts index ddd42be830..b4f8d1c36d 100644 --- a/packages/react-router-dev/vite/plugin.ts +++ b/packages/react-router-dev/vite/plugin.ts @@ -1197,6 +1197,25 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => { plugin.name !== "react-router:route-exports" && plugin.name !== "react-router:hmr-updates" ), + { + name: "react-router:override-optimize-deps", + config(userConfig) { + if ( + ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && + userConfig.environments + ) { + for (const environmentName of Object.keys( + userConfig.environments + )) { + userConfig.environments[environmentName].optimizeDeps = { + noDiscovery: true, + }; + } + } else { + userConfig.optimizeDeps = { noDiscovery: true }; + } + }, + }, ], }); await viteChildCompiler.pluginContainer.buildStart({}); From 9340f118463399693dea15bcaf78e0179316409a Mon Sep 17 00:00:00 2001 From: James Opstad <13586373+jamesopstad@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:04:08 +0000 Subject: [PATCH 4/7] Added unstable_viteEnvironmentApi condition to optimizeDeps --- packages/react-router-dev/vite/plugin.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-router-dev/vite/plugin.ts b/packages/react-router-dev/vite/plugin.ts index b4f8d1c36d..e75563beff 100644 --- a/packages/react-router-dev/vite/plugin.ts +++ b/packages/react-router-dev/vite/plugin.ts @@ -3179,6 +3179,7 @@ export async function getEnvironmentOptionsResolvers( }, }, optimizeDeps: + ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false ? { entries: [ From 345301967a6d6ad386bdd6ad484378dc5585cdb2 Mon Sep 17 00:00:00 2001 From: James Opstad <13586373+jamesopstad@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:53:17 +0000 Subject: [PATCH 5/7] CLA signed --- contributors.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/contributors.yml b/contributors.yml index e50eb40899..be524b2144 100644 --- a/contributors.yml +++ b/contributors.yml @@ -141,6 +141,7 @@ - JaffParker - jakkku - JakubDrozd +- jamesopstad - jamesrwilliams - janpaepke - jasikpark From 3c98bcbc5ba397014e4fd071823a3fab5462276e Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Mon, 17 Feb 2025 17:34:23 +1100 Subject: [PATCH 6/7] Add changeset --- .changeset/tough-rats-sparkle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tough-rats-sparkle.md diff --git a/.changeset/tough-rats-sparkle.md b/.changeset/tough-rats-sparkle.md new file mode 100644 index 0000000000..8e89b24b1b --- /dev/null +++ b/.changeset/tough-rats-sparkle.md @@ -0,0 +1,5 @@ +--- +"@react-router/dev": patch +--- + +When `future.unstable_viteEnvironmentApi` is enabled and the `ssr` environment has `optimizeDeps.noDiscovery` disabled, define `optimizeDeps.entries` and `optimizeDeps.include` From df22b5380d2abf261c6aa33fd558ad9c2fc224ca Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Mon, 17 Feb 2025 17:36:59 +1100 Subject: [PATCH 7/7] Add comments --- packages/react-router-dev/vite/plugin.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-router-dev/vite/plugin.ts b/packages/react-router-dev/vite/plugin.ts index dd3cbbe99b..b07b36bb4c 100644 --- a/packages/react-router-dev/vite/plugin.ts +++ b/packages/react-router-dev/vite/plugin.ts @@ -1169,6 +1169,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => { viteChildCompiler = await vite.createServer({ ...viteUserConfig, + // Ensure child compiler cannot overwrite the default cache directory cacheDir: "node_modules/.vite-child-compiler", mode: viteConfig.mode, server: { @@ -1200,6 +1201,7 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => { { name: "react-router:override-optimize-deps", config(userConfig) { + // Prevent unnecessary dependency optimization in the child compiler if ( ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && userConfig.environments