Modern.js 是一个基于 React 的渐进式 Web 开发框架。在字节跳动内部,Modern.js 支撑了数千个 Web 应用的研发。
Module Federation 团队与 Modern.js 团队紧密合作,并提供 @module-federation/modern-js
插件来帮助用户在 Modern.js 中更好的使用 Module Federation。
强烈推荐参考下列应用,它提供了 Modern.js 与 Module Federation 结合的最佳实践:
你可以通过如下的命令安装插件:
在 modern.config.ts
的 plugins
中应用此插件:
随后创建 module-federation.config.ts
文件,并写入需要的配置:
为更好的性能体验,Module Federation X Modern.js SSR 仅支持 stream SSR 。
在 SSR 场景与 CSR 场景中使用 Module Federation 没有任何区别,开发者保持按照原有的开发行为即可。
SSR 场景中, useEffect
不会执行,这一行为导致常规情况下,无法先获取数据再渲染组件。
为了支持这一功能,主流框架一般会基于 React Router 提供的 data loader
预取数据,并注入给路由组件,路由组件通过 useLoaderData 获取数据并渲染。
这一行为强依赖路由功能,在 Module Federation 下就无法正常使用。
为了解决这一问题,Module Federation 提供了组件级别数据获取能力,以便开发者可以在 SSR 场景下获取数据并渲染组件。
Module Federation 的使用大体分为两种部分:组件(函数)、应用。两者的区别在于是否带有路由功能。