发布于 2026-01-06 6 阅读
0

微前端详解

微前端详解

我之所以谈论这个话题,是因为我感觉微前端不再只是一个流行词,它正在大型 Web 应用程序中迅速普及。

微前端可能是前端开发领域的下一个重大发展方向。

让我来告诉你为什么!

什么是微前端?

微前端是一种用于前端代码的软件架构模式。它受到后端微服务架构模式的影响。

要了解微前端以及我们为什么需要它们,我们首先需要了解一些关于微服务的知识。

微服务架构——一种面向服务的架构(SOA)结构风格——将应用程序组织成一组松散耦合的服务。在微服务架构中,服务粒度细化,协议轻量级化。(维基百科

举个例子——如果我们有一个基于微服务的Webshop后端,其中每个服务都由一个团队负责,那么我们可以有以下微服务:

  • 产品
  • 产品目录(管理)
  • 报告
  • 顾客
  • 订单

注意:这是微服务架构的简化视图,在实际应用中,我们可能会有几十个甚至几百个微服务。

在前端领域,对于像这样的应用程序,我们可以这样做:

网店微前端

请注意以下几点:

  • 每个微前端都可以使用不同的技术构建。
  • 每个微前端都可以由一个团队负责。
  • 每个微前端只能依赖于一个微服务。

为什么选择微前端?

这样做有什么好处呢?好处很多。

还记得你加入一个老项目的开发团队,发现前端还在用 XSLT 和 jQuery 构建吗?当时根本没考虑过重写,你只能使用这些老技术来添加新功能和修复 bug。

即使你能说服利益相关者重写代码,并且你拥有一个可以维持1-3年的新代码库,你又凭什么认为10年后它不会像今天的XSLT和jQuery一样被人们所接受呢?

微前端的优势:

  • 更小、更易于维护的代码库
  • 每个微前端都可以使用不同的技术编写——这最大限度地减少了对外部的依赖。
  • 每个微前端都可以由不同的团队负责——减少跨团队依赖
  • 我们可以根据需要随时更新/升级或删除微前端。

作为一家企业,我们必须做出承诺——我们将不断地用新的微服务/前端替换旧的微服务/前端。因此,我们将持续改进我们的代码库。

例如:
我们可以删除旧的 framewok.X.js微前端,并将其完全替换为用framewok.Y.js编写的新微前端。这降低了重写整个应用程序的风险。

不同的方法

构建微前端有多种不同的方法。

方案一:每个微服务一个微前端🤖

当微服务架构基于功能时,这种方案非常合适。我们可以创建一个功能微服务——例如用于结账的功能,然后我们再构建一个结账微前端。这样做的好处是,每个微前端只需要了解一个特定的后端 API。

选项 2 - Web 组件🌟

如今,很多 UI 框架都提供了对 Web 组件的支持(Svelte 在这方面做得相当不错)。

我们可以保留一个旧版用户界面,并不断地用新的 Web 组件替换旧代码。每个新的 Web 组件都可以是一个微前端,可以用 Svelte、Vue、原生 JavaScript 或任何你喜欢的工具编写。

每个 Web 组件的代码都可以托管在不同的服务器上,因此可以轻松地进行单独部署,而不会影响系统的其余部分。

方案三——使用微前端工具🛠️

您可以使用single-spa之类的工具来实现不同微前端的连接。

这种方法最适合构建新的微前端应用程序。如果您决定使用single-spa,请务必仔细阅读他们的文档并参考他们的建议

选项 4 - 模块联合 ⚙️

这是 Webpack 5 的一项功能,它实现了:

多个独立的构建版本应该组成一个单一的应用程序。这些独立的构建版本之间不应该存在依赖关系,因此它们可以单独开发和部署。(webpack

由于 Webpack 模块联邦看起来相当稳定,因此对于使用 Webpack 的项目来说,这无疑是最令人兴奋的选择。模块联邦允许模块共享,因此通过适当的配置可以避免重复加载相同版本的 React 或 Angular 等问题。

注意:您也可以组合使用这些选项来实现所需的架构。例如,您可以single-spa结合使用module federation

我能负担得起微前端吗?

微前端当然不适用于所有应用场景。

微服务/前端/服务解决了软件重写和软件可扩展性的问题。独立部署对于微服务/前端/服务也至关重要。

它还依赖于公司拥有庞大的开发团队这一事实。在这种情况下,如果不是所有开发人员都在同一个代码库上工作,避免整天互相干扰,那就容易得多。相反,这些开发人员将被分成若干团队,每个团队负责几个甚至一个微组件/前端/服务。

微前端存在的问题

显然,任何事物都有其缺点,所以让我们来看看微前端的缺点是什么:

  • 当存在许多微服务/前端/服务时,很难在本地测试整个代码库。
  • 需要预先设计非常严格的接口。
  • 更多代码库需要维护、升级和解决安全风险
  • 最终用户需要为每个微前端下载应用程序代码,这会造成性能损失。
  • 微前端之间的通信可能会变得非常复杂。
  • 基础设施和部署也可能会变得更加复杂。

更多资源

结论

希望这篇文章能让您更清楚地了解微前端及其代表的含义,感谢您的阅读!

文章来源:https://dev.to/alexandrudanpop/microfrontends-explained-22i1