Skip to content

Commit db45174

Browse files
authored
vite: reduce network calls for route modules during HMR (#8591)
1 parent 4651e6a commit db45174

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

packages/remix-dev/vite/plugin.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,29 +1455,28 @@ function isEqualJson(v1: unknown, v2: unknown) {
14551455
}
14561456

14571457
function addRefreshWrapper(
1458-
pluginConfig: ResolvedVitePluginConfig,
1458+
remixConfig: ResolvedVitePluginConfig,
14591459
code: string,
14601460
id: string
14611461
): string {
1462-
let isRoute =
1463-
id.endsWith(CLIENT_ROUTE_QUERY_STRING) || getRoute(pluginConfig, id);
1464-
let acceptExports = isRoute
1465-
? [
1466-
"clientAction",
1467-
"clientLoader",
1468-
"handle",
1469-
"meta",
1470-
"links",
1471-
"shouldRevalidate",
1472-
]
1473-
: [];
1462+
let route = getRoute(remixConfig, id);
1463+
let acceptExports =
1464+
route || id.endsWith(CLIENT_ROUTE_QUERY_STRING)
1465+
? [
1466+
"clientAction",
1467+
"clientLoader",
1468+
"handle",
1469+
"meta",
1470+
"links",
1471+
"shouldRevalidate",
1472+
]
1473+
: [];
14741474
return (
1475-
REACT_REFRESH_HEADER.replace("__SOURCE__", JSON.stringify(id)) +
1475+
REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id)) +
14761476
code +
1477-
REACT_REFRESH_FOOTER.replace("__SOURCE__", JSON.stringify(id)).replace(
1478-
"__ACCEPT_EXPORTS__",
1479-
JSON.stringify(acceptExports)
1480-
)
1477+
REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id))
1478+
.replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports))
1479+
.replaceAll("__ROUTE_ID__", JSON.stringify(route?.id))
14811480
);
14821481
}
14831482

@@ -1511,6 +1510,7 @@ if (import.meta.hot && !inWebWorker && window.__remixLiveReloadEnabled) {
15111510
RefreshRuntime.registerExportsForReactRefresh(__SOURCE__, currentExports);
15121511
import.meta.hot.accept((nextExports) => {
15131512
if (!nextExports) return;
1513+
__ROUTE_ID__ && window.__remixRouteModuleUpdates.set(__ROUTE_ID__, nextExports);
15141514
const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(currentExports, nextExports, __ACCEPT_EXPORTS__);
15151515
if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
15161516
});

packages/remix-dev/vite/static/refresh-utils.cjs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ const enqueueUpdate = debounce(async () => {
1717

1818
for (let route of routeUpdates.values()) {
1919
manifest.routes[route.id] = route;
20-
21-
let imported = await __hmr_import(route.url + "?t=" + Date.now());
20+
let imported = window.__remixRouteModuleUpdates.get(route.id);
21+
if (!imported) {
22+
throw Error(`[remix:hmr] No module update found for route ${route.id}`);
23+
}
2224
let routeModule = {
2325
...imported,
2426
// react-refresh takes care of updating these in-place,
@@ -53,6 +55,7 @@ const enqueueUpdate = debounce(async () => {
5355
);
5456
__remixRouter._internalSetRoutes(routes);
5557
routeUpdates.clear();
58+
window.__remixRouteModuleUpdates.clear();
5659
}
5760

5861
await revalidate();
@@ -138,6 +141,7 @@ function __hmr_import(module) {
138141
}
139142

140143
const routeUpdates = new Map();
144+
window.__remixRouteModuleUpdates = new Map();
141145

142146
async function revalidate() {
143147
let { promise, resolve } = channel();

0 commit comments

Comments
 (0)