微前端

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200美元免费额度!

不久前的一天,我开始听到关于“微前端”的一个接一个的笑话——有点像我第一次了解 Toast 的方式。在四处询问之前,我并不理解其来源,询问后发现 Cam Jackson 的这篇文章

在这篇文章中,我们将描述一种最近的趋势,即把前端单体应用分解成许多更小、更易于管理的片段,以及这种架构如何提高处理前端代码的团队的有效性和效率。

我认为它 应该 读作“前端单体应用”和“前端代码”,但我已经离题了。

这个想法类似于微服务,但适用于前端。因此,与其使用一个大型前端架构(例如 React 应用),不如将前端的不同部分完全独立地开发,彼此之间没有任何依赖关系,并且可以独立地进行开发和部署。

这是一个你无法确定它是否真的是对未来的有趣预示,仅仅是偶然对少数大型组织有效的利基架构选择,甚至仅仅是一个理论选项。

我的第一个想法是前后端一致性和 DRY 原则。在我工作过的任何地方,这些都是大事,而且似乎整个行业在前端方面一直存在着无尽的问题,这些问题与交付从一开始就保持一致和连贯的设计有关,并且不会重复使用大量的技术债务。如果 B 团队因与 A 团队无关的事情而被阻塞,则独立的前端听起来可能是一个问题,但随后它会引入 B 团队的输出与 A 团队的输出不一致的问题。

文章本身谈到了一个浏览/搜索登陆页面、一个详情/订购页面和一个个人资料页面,所有这三个页面都由不同的独立产品/团队处理。在我看来,这听起来很酷很有趣,但也听起来像是这些团队最好在工作中彼此相邻而坐;否则,这个应用在两周内就会变成弗兰肯斯坦的怪物。样式只被轻描淡写地提及,带有“我不知道,做好就行了”的感觉。当所有团队都在同一个产品上工作时,他们都会遇到这个问题,因此我在这里会有很大的担忧。如果认真讨论此事,我想解决的第一个问题将是一个超越所有这些内容的设计系统,并且每个人都必须使用它。

如果这些微前端共存在同一个页面上怎么办?文章说,使用 <iframe>。我无法想象一个世界,在这个世界里,这会导致良好的用户体验。(iFrames 很慢,尤其是当它们都启动自己的世界时,有很多 iFrames——工具提示和菜单等可能超出边界的元素怎么办?)

其他集成选项……将它们隔离到自己的捆绑包中,甚至使用原生 Web Components 听起来好一点。但是,一个 React 组件可能与一个 Vue 组件放在同一个页面上的这种孤立开发的想法,似乎对用户来说是一个巨大的损失,仅仅是为了解决一个非常具体的组织问题。更不用说,你失去了对代码库的共享理解以及对更小工具集的更深入的技术理解的好处。

我可能没有公平地描述所有这些,特别是因为这个想法对我来说是相当新的,我以前从未这样工作过。

Nader Dabit 有一篇后续文章:使用 React、Vue 和 Single-spa 构建微前端。只是为了避免误解:这个想法确实是你可以构建一个 React 应用,我构建一个 Vue 应用,然后我们将它们放在同一个页面上。我肯定来自一个时代,当我们发现使用多个版本的 jQuery 在同一个页面上,加上一个似乎是偶然加载了所有 MooTools 和 Prototype 的东西时,我们会先笑然后感到沮丧。我们感到沮丧,因为那是一个装满 JavaScript 的桶,大部分是无缘无故地重复,导致 bug 并减慢页面速度。这看起来没什么不同。

Joel Denning 在关于该主题的 AMA指出

我想指出的是,我们正处于这个想法的“不仔细审查就讨厌”阶段。完全有可能在经过合法、仔细审查后,这个想法仍然失败。但现在还为时尚早。

公平地说。

抱歉堆积了这么多。😣