@@ -183,7 +183,7 @@ function createRemoteAppComponent<T = Record<string, unknown>, E extends keyof T
183183>
184184```
185185
186- ### RemoteComponentParams \< T , E \>
186+ #### RemoteComponentParams \< T , E \>
187187
188188配置参数接口:
189189
@@ -206,7 +206,7 @@ interface RemoteComponentParams<T = Record<string, unknown>, E extends keyof T =
206206}
207207` ` `
208208
209- ### RemoteComponentProps \< T \>
209+ #### RemoteComponentProps \< T \>
210210
211211返回组件的属性接口:
212212
@@ -241,7 +241,7 @@ interface RemoteComponentProps<T = Record<string, unknown>> {
241241
242242### 参数详解
243243
244- ### loader
244+ #### loader
245245
246246- ** 类型** : ` () => Promise<T> `
247247- ** 必需** : 是
@@ -252,7 +252,7 @@ interface RemoteComponentProps<T = Record<string, unknown>> {
252252 loader: () => import('remote1/export-app')
253253 ` ` `
254254
255- ### loading
255+ #### loading
256256
257257- ** 类型** : ` React.ReactNode `
258258- ** 必需** : 是
@@ -264,7 +264,7 @@ interface RemoteComponentProps<T = Record<string, unknown>> {
264264 loading: <Spinner />
265265 ` ` `
266266
267- ### fallback
267+ #### fallback
268268
269269- ** 类型** : ` React.ComponentType<{ error: Error }> `
270270- ** 必需** : 是
@@ -275,7 +275,7 @@ interface RemoteComponentProps<T = Record<string, unknown>> {
275275 fallback: ErrorBoundaryComponent
276276 ` ` `
277277
278- ### export
278+ #### export
279279
280280- ** 类型** : ` E extends keyof T ` (泛型约束,通常是 ` string ` )
281281- ** 必需** : 否
@@ -310,4 +310,114 @@ interface RemoteComponentProps<T = Record<string, unknown>> {
310310 loader: () => loadRemote('remote1/export-app'),
311311 export: 'dashboard'
312312 })
313- ` ` `
313+ ` ` `
314+
315+
316+ ## Bundle 体积优化
317+
318+ ### React Router 依赖说明
319+
320+ 默认情况下,` @module-federation/bridge-react ` 会将 ` react-router-dom ` 打包到你的 bundle 中,这是为了提供以下开箱即用的能力:
321+
322+ - ✅ 自动 basename 注入 - 无需手动配置路由基础路径
323+ - ✅ 路由上下文传递 - 自动处理 React Router 上下文
324+ - ✅ 嵌套路由支持 - 完整的路由集成能力
325+
326+ ** 但是** ,如果你的项目满足以下任一条件:
327+ - 不需要路由功能(纯组件加载)
328+ - 使用非 react - router 的路由框架(如 TanStack Router )
329+ - 希望最小化 bundle 体积
330+
331+ ** 建议关闭** ` enableBridgeRouter ` 配置来禁用此能力,这将:
332+ - ✅ 减小 bundle 体积约 3KB (gzipped )
333+ - ✅ 避免不必要的依赖注入
334+ - ✅ 消除潜在的版本冲突风险
335+
336+ ### 如何禁用 Router 依赖
337+
338+ 你可以通过 ` bridge.enableBridgeRouter ` 配置来控制是否包含路由支持:
339+
340+ ` ` ` ts title="rsbuild.config.ts"
341+ import { pluginModuleFederation } from '@module-federation/rsbuild-plugin';
342+
343+ export default {
344+ plugins: [
345+ pluginModuleFederation({
346+ name: 'host-app',
347+ remotes: {
348+ remote1: 'remote1@http://localhost:3001/mf-manifest.json',
349+ },
350+ bridge: {
351+ // 禁用路由支持以减小 bundle 体积
352+ enableBridgeRouter: false,
353+ },
354+ }),
355+ ],
356+ };
357+ ` ` `
358+
359+ :::tip 配置行为
360+ - ** ` enableBridgeRouter: false ` ** : 自动 alias 到 ` /base ` 入口(不包含 react - router - dom 代码)
361+ - ** ` enableBridgeRouter: true ` ** 或 ** ` undefined ` ** : 包含路由支持(默认行为)
362+
363+ :::
364+
365+ ### 何时禁用 Router ?
366+
367+ ** 禁用 router ** (` enableBridgeRouter: false ` ) 适用于:
368+ - ✅ 应用不使用 react - router
369+ - ✅ 想要最小化 bundle 体积
370+ - ✅ 可以手动管理 basename (如果需要)
371+
372+ ** 保持 router 启用** (默认)适用于:
373+ - ✅ 应用使用 react - router
374+ - ✅ 需要自动 basename 注入
375+ - ✅ 需要路由上下文集成
376+
377+ ### 迁移示例
378+
379+ #### 迁移前:启用 Router (默认)
380+ ` ` ` tsx
381+ import { createRemoteAppComponent } from '@module-federation/bridge-react';
382+
383+ const RemoteApp = createRemoteAppComponent({
384+ loader: () => loadRemote('remote1/app'),
385+ loading: <div>Loading...</div>,
386+ fallback: ErrorBoundary,
387+ });
388+
389+ // basename 自动从路由上下文获取
390+ <RemoteApp />
391+ ` ` `
392+
393+ #### 迁移后:禁用 Router (优化)
394+ ` ` ` ts title="rsbuild.config.ts"
395+ // 配置
396+ pluginModuleFederation({
397+ bridge: {
398+ enableBridgeRouter: false, // 禁用 router
399+ },
400+ })
401+ ` ` `
402+
403+ ` ` ` tsx
404+ import { createRemoteAppComponent } from '@module-federation/bridge-react';
405+
406+ const RemoteApp = createRemoteAppComponent({
407+ loader: () => loadRemote('remote1/app'),
408+ loading: <div>Loading...</div>,
409+ fallback: ErrorBoundary,
410+ });
411+
412+ // 无需修改代码!插件会自动 alias 到 /base 入口
413+ <RemoteApp basename="/" /> // 如果需要,手动传递 basename
414+ ` ` `
415+
416+ :::info 工作原理
417+ 当设置 ` enableBridgeRouter: false ` 时,Module Federation 插件会自动设置 webpack alias :
418+ ```
419+ '@module-federation/bridge-react ' → '@module-federation/bridge-react /base'
420+ ```
421+
422+ 这意味着你的导入会自动解析到无路由版本,无需修改任何代码!
423+ :::
0 commit comments