在过去的几年里,微前端架构一直在寻找一条正确的道路。然而,我们看到的是各种复杂的技术方案,它们用层层包装和人工隔离来模拟一个理想的微前端世界。这些方案带来了沉重的性能负担,让简单的开发变得复杂,让标准的流程变得晦涩。
在实践微前端架构的过程中,我们深刻体会到传统方案的诸多限制:
这些问题在我们 2019 年的一个企业级项目中表现得尤为突出。当时,一个大型产品被拆分为十余个独立的业务子系统,这些子系统需要共享一套基础组件和业务组件。最初采用的基于 npm 包的组件共享方案,在实践中暴露出了严重的维护效率问题:当共享组件发生更新时,所有依赖该组件的子系统都需要经历完整的构建和部署流程。
为解决组件共享的效率问题,Esmx v1.0 引入了基于 HTTP 协议的 RemoteView 组件机制。这一方案通过运行时动态请求的方式实现了服务间的代码按需组装,成功解决了构建依赖链过长的问题。然而,由于缺乏标准化的运行时通信机制,服务间的状态同步和事件传递仍然存在效率瓶颈。
在 v2.0 版本中,我们采用了 Webpack 5.0 的模块联邦(Module Federation)技术。这一技术通过统一的模块加载机制和运行时容器,显著提升了服务间的协同效率。但在大规模实践中,模块联邦的封闭式实现机制带来了新的挑战:难以实现精确的依赖版本管理,特别是在统一多个服务的共享依赖时,经常遇到版本冲突和运行时异常。
在规划 v3.0 版本时,我们深入观察了前端生态的发展趋势,发现浏览器原生能力的进步为微前端架构带来了新的可能:
随着主流浏览器对 ES Modules 的全面支持,以及 Import Maps 规范的成熟,前端开发迎来了真正的模块化时代。根据 Can I Use 的统计数据,目前主流浏览器(Chrome >= 89、Edge >= 89、Firefox >= 108、Safari >= 16.4)对 ESM 的原生支持率已达到 93.5%,这为我们提供了以下优势:
同时,通过兼容模式的支持(Chrome >= 87、Edge >= 88、Firefox >= 78、Safari >= 14),我们可以将浏览器覆盖率进一步提升至 96.81%,这让我们能够在保持高性能的同时,不牺牲对旧版浏览器的支持。
原生模块系统带来的不仅是标准化,更重要的是性能和隔离性的质的提升:
在技术方案的落地过程中,构建工具的选择是一个关键决策点。经过近一年的技术调研和实践,我们的选择经历了以下演进:
Vite 探索
Rspack 确立
这一决策让我们在保持开发体验的同时,获得了更稳定的生产环境支持。基于 ESM 和 Rspack 的组合,我们最终构建了一个高性能、低侵入性的微前端解决方案。
在未来的发展规划中,Esmx 框架将重点关注以下三个方向:
通过这些优化和扩展,我们期望让 Esmx 成为一个更加完善、易用的微前端解决方案,为开发者提供更好的开发体验和更高的开发效率。