Skip to content

Commit d179bb3

Browse files
committed
feat: webpack mfe
1 parent 278f712 commit d179bb3

20 files changed

Lines changed: 1175 additions & 13 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
/dist
44
/dist-projectA
55
/dist-projectB
6+
/dist-projectC
7+
/dist-shell
8+
/dist-vercel
69
/node_modules
710
/.eslintcache
811
tsconfig.tsbuildinfo

README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,55 @@ src/projects/
175175

176176
---
177177

178+
## 🧩 微前端(Webpack Module Federation)POC
179+
180+
在“多项目模式”的基础上,仓库提供一个 **Webpack Module Federation** 的最小可运行 POC:
181+
182+
- Shell(host) 统一承载与导航
183+
- projectA/projectB 以 remote 的形式被动态加载
184+
- 目标部署形态:**同域名不同 path**(例如 `/``/projectA/``/projectB/`
185+
186+
### ✅ 本地联调(3 个 devServer)
187+
188+
1) 启动两个 remote:
189+
190+
- `npm run start:mf:projectA`(默认 `http://localhost:8081/`,remoteEntry:`/remoteEntry.js`
191+
- `npm run start:mf:projectB`(默认 `http://localhost:8082/`,remoteEntry:`/remoteEntry.js`
192+
193+
2) 启动 Shell(host):
194+
195+
- `npm run start:mf:shell`(默认 `http://localhost:8080/`
196+
197+
3) 访问:
198+
199+
- `http://localhost:8080/#/portal`
200+
- `http://localhost:8080/#/projectA`
201+
- `http://localhost:8080/#/projectB`
202+
203+
### 📦 生产构建与同域名不同 path 部署
204+
205+
- Shell(host):`npm run build:mf:shell` → 输出到 `dist-shell/`
206+
- projectA(remote):`npm run build:mf:projectA` → 输出到 `dist-projectA/`
207+
- projectB(remote):`npm run build:mf:projectB` → 输出到 `dist-projectB/`
208+
209+
推荐的网关/Nginx 映射(示意):
210+
211+
- `/``dist-shell/`
212+
- `/projectA/``dist-projectA/`
213+
- `/projectB/``dist-projectB/`
214+
215+
其中 remoteEntry 在生产默认按路径引用:
216+
217+
- projectA:`/projectA/remoteEntry.js`
218+
- projectB:`/projectB/remoteEntry.js`
219+
220+
说明:
221+
222+
- 目前路由使用 Hash Router(`/#/...`),通常不依赖 history fallback。
223+
- 这是 POC:remote 暴露的是 `src/projects/<project>/mfe/App.tsx` 对应的 `./App` 模块;Shell 通过 `import('projectA/App')` / `import('projectB/App')` 动态加载。
224+
225+
---
226+
178227
## 📝 近期主要更新
179228

180229
-**性能优化**:重构 `KeepAlive` 实现,支持 React 19 `<Activity>` (Offscreen) 原生冻结,降级模式采用 CSS 显隐替代 DOM 移动,大幅减少重排

0 commit comments

Comments
 (0)