Skip to content

Commit fcdef3e

Browse files
feat: consolidate HMR system to unified reloadAll method
- Simplified HMR to single reloadAll approach, removing backward compatibility - Fixed module-level variable persistence using Next.js internal APIs - Updated _document.js to only check reloadAll query parameter - Updated API endpoint to only support reload-all action - Added comprehensive tests for unified HMR functionality - Verified render counter properly resets after HMR trigger 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 356d3dd commit fcdef3e

File tree

326 files changed

+640525
-276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

326 files changed

+640525
-276
lines changed

apps/3000-home/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
!node_modules/next
2+
!.next
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"polyfillFiles": [
3+
"static/chunks/polyfills.js"
4+
],
5+
"devFiles": [
6+
"static/chunks/react-refresh.js"
7+
],
8+
"ampDevFiles": [],
9+
"lowPriorityFiles": [
10+
"static/development/_buildManifest.js",
11+
"static/development/_ssgManifest.js"
12+
],
13+
"rootMainFiles": [],
14+
"pages": {
15+
"/": [
16+
"static/chunks/webpack.js",
17+
"static/chunks/main.js",
18+
"static/chunks/pages/index.js"
19+
],
20+
"/_app": [
21+
"static/chunks/webpack.js",
22+
"static/chunks/main.js",
23+
"static/chunks/pages/_app.js"
24+
],
25+
"/_error": [
26+
"static/chunks/webpack.js",
27+
"static/chunks/main.js",
28+
"static/chunks/pages/_error.js"
29+
]
30+
},
31+
"ampFirstPages": []
32+
}

apps/3000-home/.next/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"type": "commonjs"}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"pages/_app.tsx -> ../components/SharedNav": {
3+
"id": "pages/_app.tsx -> ../components/SharedNav",
4+
"files": [
5+
"static/chunks/components_SharedNav_tsx.js"
6+
]
7+
},
8+
"pages/_app.tsx -> checkout/menu": {
9+
"id": "pages/_app.tsx -> checkout/menu",
10+
"files": []
11+
},
12+
"pages/_app.tsx -> shop/menu": {
13+
"id": "pages/_app.tsx -> shop/menu",
14+
"files": []
15+
},
16+
"pages/index.tsx -> shop/WebpackPng": {
17+
"id": "pages/index.tsx -> shop/WebpackPng",
18+
"files": []
19+
},
20+
"pages/index.tsx -> shop/WebpackSvg": {
21+
"id": "pages/index.tsx -> shop/WebpackSvg",
22+
"files": []
23+
}
24+
}
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
"use strict";
2+
exports.id = "__federation_expose_SharedNav";
3+
exports.ids = ["__federation_expose_SharedNav"];
4+
exports.modules = {
5+
6+
/***/ "./components/SharedNav.tsx":
7+
/*!**********************************!*\
8+
!*** ./components/SharedNav.tsx ***!
9+
\**********************************/
10+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11+
12+
__webpack_require__.r(__webpack_exports__);
13+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
15+
/* harmony export */ });
16+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ "webpack/sharing/consume/default/react/jsx-dev-runtime/react/jsx-dev-runtime");
17+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);
18+
/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! styled-jsx/style */ "styled-jsx/style");
19+
/* harmony import */ var styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(styled_jsx_style__WEBPACK_IMPORTED_MODULE_1__);
20+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
21+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
22+
/* harmony import */ var _barrel_optimize_names_Layout_Menu_antd__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Layout,Menu!=!antd */ "__barrel_optimize__?names=Layout,Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js");
23+
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/router */ "webpack/sharing/consume/default/next/router/next/router");
24+
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_router__WEBPACK_IMPORTED_MODULE_3__);
25+
/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./menu */ "./components/menu.tsx");
26+
27+
28+
29+
30+
31+
32+
const SharedNav = ()=>{
33+
const { asPath, push } = (0,next_router__WEBPACK_IMPORTED_MODULE_3__.useRouter)();
34+
let activeMenu;
35+
if (asPath === "/" || asPath.startsWith("/home")) {
36+
activeMenu = "/";
37+
} else if (asPath.startsWith("/shop")) {
38+
activeMenu = "/shop";
39+
} else if (asPath.startsWith("/checkout")) {
40+
activeMenu = "/checkout";
41+
}
42+
const menuItems = [
43+
{
44+
className: "home-menu-link",
45+
label: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
46+
children: [
47+
"Home ",
48+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("sup", {
49+
children: "3000"
50+
}, void 0, false, {
51+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
52+
lineNumber: 23,
53+
columnNumber: 16
54+
}, undefined)
55+
]
56+
}, void 0, true),
57+
key: "/"
58+
},
59+
{
60+
className: "shop-menu-link",
61+
label: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
62+
children: [
63+
"Shop ",
64+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("sup", {
65+
children: "3001"
66+
}, void 0, false, {
67+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
68+
lineNumber: 32,
69+
columnNumber: 16
70+
}, undefined)
71+
]
72+
}, void 0, true),
73+
key: "/shop"
74+
},
75+
{
76+
className: "checkout-menu-link",
77+
label: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
78+
children: [
79+
"Checkout ",
80+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("sup", {
81+
children: "3002"
82+
}, void 0, false, {
83+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
84+
lineNumber: 41,
85+
columnNumber: 20
86+
}, undefined)
87+
]
88+
}, void 0, true),
89+
key: "/checkout"
90+
}
91+
];
92+
return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Layout_Menu_antd__WEBPACK_IMPORTED_MODULE_5__.Layout.Header, {
93+
children: [
94+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", {
95+
className: "jsx-a6af1a4577f74e53" + " " + "header-logo",
96+
children: "nextjs-mf"
97+
}, void 0, false, {
98+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
99+
lineNumber: 50,
100+
columnNumber: 7
101+
}, undefined),
102+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Layout_Menu_antd__WEBPACK_IMPORTED_MODULE_5__.Menu, {
103+
theme: "dark",
104+
mode: "horizontal",
105+
selectedKeys: activeMenu ? [
106+
activeMenu
107+
] : undefined,
108+
onClick: ({ key })=>{
109+
push(key);
110+
},
111+
items: menuItems
112+
}, void 0, false, {
113+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
114+
lineNumber: 51,
115+
columnNumber: 7
116+
}, undefined),
117+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((styled_jsx_style__WEBPACK_IMPORTED_MODULE_1___default()), {
118+
id: "a6af1a4577f74e53",
119+
children: ".header-logo.jsx-a6af1a4577f74e53{float:left;width:200px;height:31px;margin-right:24px;color:white;font-size:2rem}"
120+
}, void 0, false, void 0, undefined)
121+
]
122+
}, void 0, true, {
123+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/SharedNav.tsx",
124+
lineNumber: 49,
125+
columnNumber: 5
126+
}, undefined);
127+
};
128+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SharedNav);
129+
130+
131+
/***/ }),
132+
133+
/***/ "./components/menu.tsx":
134+
/*!*****************************!*\
135+
!*** ./components/menu.tsx ***!
136+
\*****************************/
137+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
138+
139+
__webpack_require__.r(__webpack_exports__);
140+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
141+
/* harmony export */ "default": () => (/* binding */ AppMenu)
142+
/* harmony export */ });
143+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ "webpack/sharing/consume/default/react/jsx-dev-runtime/react/jsx-dev-runtime");
144+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);
145+
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/router */ "webpack/sharing/consume/default/next/router/next/router");
146+
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_router__WEBPACK_IMPORTED_MODULE_1__);
147+
/* harmony import */ var _barrel_optimize_names_Menu_antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Menu!=!antd */ "__barrel_optimize__?names=Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js");
148+
149+
150+
151+
const menuItems = [
152+
{
153+
label: "Main home",
154+
key: "/"
155+
},
156+
{
157+
label: "Test hook from remote",
158+
key: "/home/test-remote-hook"
159+
},
160+
{
161+
label: "Test broken remotes",
162+
key: "/home/test-broken-remotes"
163+
},
164+
{
165+
label: "Exposed pages",
166+
key: "/home/exposed-pages"
167+
},
168+
{
169+
label: "Exposed components",
170+
type: "group",
171+
children: [
172+
{
173+
label: "home/SharedNav",
174+
key: "/home/test-shared-nav"
175+
}
176+
]
177+
}
178+
];
179+
function AppMenu() {
180+
const router = (0,next_router__WEBPACK_IMPORTED_MODULE_1__.useRouter)();
181+
return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {
182+
children: [
183+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", {
184+
style: {
185+
padding: "10px",
186+
fontWeight: 600,
187+
backgroundColor: "#fff"
188+
},
189+
children: "Home App Menu"
190+
}, void 0, false, {
191+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/menu.tsx",
192+
lineNumber: 23,
193+
columnNumber: 7
194+
}, this),
195+
/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Menu_antd__WEBPACK_IMPORTED_MODULE_2__.Menu, {
196+
mode: "inline",
197+
selectedKeys: [
198+
router.asPath
199+
],
200+
style: {
201+
height: "100%"
202+
},
203+
onClick: ({ key })=>router.push(key),
204+
items: menuItems
205+
}, void 0, false, {
206+
fileName: "/Users/bytedance/dev/universe/apps/3000-home/components/menu.tsx",
207+
lineNumber: 28,
208+
columnNumber: 7
209+
}, this)
210+
]
211+
}, void 0, true);
212+
}
213+
214+
215+
/***/ }),
216+
217+
/***/ "__barrel_optimize__?names=Layout,Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js":
218+
/*!************************************************************************************************************************************************!*\
219+
!*** __barrel_optimize__?names=Layout,Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js ***!
220+
\************************************************************************************************************************************************/
221+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
222+
223+
__webpack_require__.r(__webpack_exports__);
224+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
225+
/* harmony export */ Layout: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_0__["default"]),
226+
/* harmony export */ Menu: () => (/* reexport safe */ _menu__WEBPACK_IMPORTED_MODULE_1__["default"])
227+
/* harmony export */ });
228+
/* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./layout */ "../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/layout/index.js");
229+
/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu */ "../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/menu/index.js");
230+
/* __next_internal_client_entry_do_not_use__ Layout,Menu auto */
231+
232+
233+
234+
/***/ }),
235+
236+
/***/ "__barrel_optimize__?names=Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js":
237+
/*!*****************************************************************************************************************************************!*\
238+
!*** __barrel_optimize__?names=Menu!=!../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/index.js ***!
239+
\*****************************************************************************************************************************************/
240+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
241+
242+
__webpack_require__.r(__webpack_exports__);
243+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
244+
/* harmony export */ Menu: () => (/* reexport safe */ _menu__WEBPACK_IMPORTED_MODULE_0__["default"])
245+
/* harmony export */ });
246+
/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "../../node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/menu/index.js");
247+
/* __next_internal_client_entry_do_not_use__ Menu auto */
248+
249+
250+
/***/ })
251+
252+
};
253+
;

0 commit comments

Comments
 (0)