Skip to content

Commit 6f2168e

Browse files
fix(dev): Use module-sync server condition when enabled (#12729)
1 parent f39b2ea commit 6f2168e

File tree

7 files changed

+30
-0
lines changed

7 files changed

+30
-0
lines changed

.changeset/new-news-decide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@react-router/dev": patch
3+
---
4+
5+
Use `module-sync` server condition when enabled in the runtime. This fixes React context mismatches (e.g. `useHref() may be used only in the context of a <Router> component.`) during development on Node 22.10.0+ when using libraries that have a peer dependency on React Router.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exports.default = false;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare const moduleSyncEnabled: boolean;
2+
export { moduleSyncEnabled };
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { createRequire } from "node:module";
2+
const require = createRequire(import.meta.url);
3+
const moduleSyncEnabled = require("#module-sync-enabled").default;
4+
export { moduleSyncEnabled };
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const moduleSyncEnabled = true;
2+
export default moduleSyncEnabled;

packages/react-router-dev/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@
3131
},
3232
"./package.json": "./package.json"
3333
},
34+
"imports": {
35+
"#module-sync-enabled": {
36+
"module-sync": "./module-sync-enabled/true.mjs",
37+
"default": "./module-sync-enabled/false.cjs"
38+
}
39+
},
3440
"bin": {
3541
"react-router": "bin.js"
3642
},
@@ -44,6 +50,7 @@
4450
"files": [
4551
"cli/**",
4652
"config/**",
53+
"module-sync-enabled/**",
4754
"typegen/**",
4855
"vite/**",
4956
"*.ts",
@@ -140,6 +147,7 @@
140147
},
141148
"files": [
142149
"dist/",
150+
"module-sync-enabled/",
143151
"bin.js",
144152
"CHANGELOG.md",
145153
"LICENSE.md",

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,8 +749,16 @@ export const reactRouterVitePlugin: ReactRouterVitePlugin = () => {
749749
let viteClientConditions: string[] = [
750750
...(vite.defaultClientConditions ?? []),
751751
];
752+
753+
let packageRoot = path.dirname(
754+
require.resolve("@react-router/dev/package.json")
755+
);
756+
let { moduleSyncEnabled } = await import(
757+
`file:///${path.join(packageRoot, "module-sync-enabled/index.mjs")}`
758+
);
752759
let viteServerConditions: string[] = [
753760
...(vite.defaultServerConditions ?? []),
761+
...(moduleSyncEnabled ? ["module-sync"] : []),
754762
];
755763

756764
logger = vite.createLogger(viteUserConfig.logLevel, {

0 commit comments

Comments
 (0)