本文深入分析了全球时尚零售巨头 Inditex 如何运用微前端架构构建其全球技术平台 IOP(Inditex Open Platform)中的 IOP Product。文章指出,为解决采购流程中不同角色用户使用独立应用带来的体验割裂和开发效率低下问题,Inditex 引入了微前端方案。该方案将复杂的 Web 应用拆分为独立的远程模块(Remotes),由统一的壳层(Shell)集成。文章详细阐述了微前端如何满足 Inditex 对模块化应用、独立开发团队、面向未来可扩展性、一致导航布局及性能优化的需求。同时,文章也坦诚地讨论了实施微前端所面临的挑战,并给出了具体解决方案,包括通过 Shell 集中管理导航、利用内部权限系统 Heimdal 确保分布式权限管理,以及通过共享上下文(Shared Context)和事件总线(Event Bus)实现 Remotes 间高效通信。最后,文章结合用户登录场景,生动描绘了微前端在 IOP Product 中的实际运作流程,并展望了未来构建可复用工具和库以支持更多微前端平台的计划。Inditex 的实践证明,微前端架构能有效平衡团队独立性与用户体验的统一性,为大型企业级应用开发提供了宝贵借鉴。
src="https://api.eyabc.cn/api/picture/scenery/?k=12cfb495&u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FmeG6Vo0Mevg1ElBDIOgLibbJibkPDVuJTicFibueLQiaIml8ict9G4cdZk4lGljMLdmOWrCnlu4Rk41138FxuB6iasCNQ%2F0%3Fwx_fmt%3Djpeg">
前言
介绍了 Inditex(旗下拥有 Zara 等多个品牌)如何采用微前端架构来构建其全球技术平台 IOP(Inditex Open Platform)中的 IOP Product,以实现快速、安全和一致的数字产品构建、集成和扩展。今日前端早读课文章由 @Inditex Tech 分享,@飘飘编译。
译文从这开始~~
Inditex 是一家全球时尚零售集团,旗下拥有 Zara、Pull&Bear、Massimo Dutti、Bershka、Stradivarius、Oysho、Zara Home 和 Lefties 等品牌。它们共同的愿景是:为顾客提供富有灵感、高品质、并且可持续生产的时尚体验。
IOP(Inditex Open Platform,Inditex 开放平台)是 Inditex 的全球技术平台,它让团队能够以更快、更安全、更一致的方式来构建、集成和扩展数字化产品。本文将分享一个关于 IOP Product 的真实案例。
IOP 案例研究
在 Inditex 的采购流程中,涉及不同角色的用户,他们在各个环节都有所参与:从设计师负责设计系列产品,到财务人员负责监控业绩和预算,再到供应商管理生产和交付等。每个角色都会使用不同的应用程序来完成工作。
虽然这些应用程序都是采购流程的一部分,但它们在过去是独立开发的,以满足不断增长的业务需求。
为了让用户更方便地访问这些工具,Inditex 构建了 IOP Product —— 一个基于微前端的解决方案,把所有与采购相关的应用整合到一个统一的平台中。对用户来说,它看起来就像一个完整的产品,但实际上是由多个独立开发的工具组成。
接下来,我们将介绍它的构建过程:架构决策、面临的挑战,以及微前端是如何帮助我们在保持开发团队独立性的同时,也能确保一致的用户体验。
什么是微前端?
微前端的概念可以看作是把微服务的模块化思想引入到前端开发中。它将复杂的 Web 应用拆分成更小的、独立运行的单元,这些单元被称为 Remotes(远程模块)。
每个 Remote 都是一个独立的的应用程序,能自主运行、独立迭代。它们会被统一集成到一个称为 Shell(壳层) 的用户界面中,由 Shell 来负责用户导航和远程模块的调度。
微前端的关键组成部分:
1、Shell(壳层)
作为主容器,根据用户的角色和权限加载并显示不同的远程模块,确保平台的流畅交互。
2、Remotes(远程模块)
独立的应用,集成到 Shell 中,每个模块专注于某一功能领域。
3、Components(组件)
在远程模块内部可复用的软件单元,用来保持平台结构和逻辑的一致性。

微前端架构的核心思想是将功能解耦为独立、可管理的单元。每个 Remote 对应一个具体的业务领域,由专门的团队开发和维护,这样既能并行推进,又能保证团队的自主性。而 Shell 负责把它们拼接成一个整体,从用户角度来看,整个系统依然是流畅且统一的。
为什么在 IOP Product 中使用微前端?
为了统一 Inditex 的采购应用,新方案不仅仅是要集中入口,更需要一种能够支持以下特性的架构:
-
1、模块化应用:每个模块能够独立运行,专注于特定业务领域。
-
2、独立的开发团队:各团队可以按照自己的节奏构建、测试和发布。
-
3、可扩展性:能够在不影响平台整体运行的前提下,新增功能或应用。
-
4、一致的导航和布局:保证不同应用之间的使用体验连贯统一。
-
5、性能优化:根据用户实际需求,动态加载相关内容,而不是一次性加载全部应用。
微前端正好满足了这些需求,因此成为 IOP Product 的核心架构。下面来看看这些要求是如何在实践中落实的。
【第3581期】复杂 React/Next.js 应用的数据获取架构
1. 模块化应用
IOP Product 服务于各种用户角色(从设计师到财务人员,再到供应商),每个角色都有不同的业务流程。
通过微前端,平台被拆分为多个 Remotes(远程模块),每个模块可以独立运作。这种分离让团队能够独立开发、管理和演进各自的功能,减少依赖关系,同时简化了维护工作。
2. 独立的开发团队
在 IOP Product 中,每个业务领域(或应用)都由不同的团队负责,各自有不同的优先级和交付节奏。具体来说:40 个应用,共暴露出 100 个微前端,由 30 个团队维护。如果所有团队都要统一协调集中发布,将变得难以维系。
借助微前端后,每个团队对自己的 Remote 负全责,从开发到上线都能独立完成,避免了跨团队的瓶颈,加快了迭代速度,也提升了可靠性。
3. 面向未来的可扩展性
随着平台的不断发展,新应用、新角色和新需求不断涌现。如果架构过于僵化,每次变更都要返工。
微前端让 IOP Product 天生具备扩展性。新的 Remote 可以独立添加、更新或下线,而无需对整个平台进行大规模改造。
4. 一致的导航和布局
尽管不同的应用由不同的团队开发,用户体验必须保持统一。
由 Shell(壳层) 负责控制布局、导航和上下文数据,这确保了无论用户使用哪一个 Remote,整个平台的体验始终连贯一致。
5. 性能优化
设计师、财务人员和供应商所需的应用并不相同。如果一次性加载整个平台,会大大拖慢速度。
【第3559期】深入分析 await fetch() 性能问题及优化方法
微前端让 Shell 可以根据用户角色和具体场景,动态加载所需的 Remote,从而提升性能和响应速度。

在 Inditex 的 Web 项目中,我们使用了一个基于 React 的自研框架,为构建 Web 应用提供了统一的基础:标准化的组件、设计变量、响应式断点和布局结构,帮助各团队保持一致性。
随着平台转向微前端,我们对该框架进行了扩展,使其原生支持微前端。。它现在不仅能处理 Remote 的暴露与挂载,还能标准化 Shell 与微前端的集成方式,并为分布式架构的开发提供最佳实践。
通过把微前端能力直接嵌入框架,我们让团队更容易采用这种架构,同时确保所有应用保持一致性。
基于微前端平台的开发挑战
在 IOP Product 中采用微前端架构带来了灵活性、模块化和可扩展性。但要让平台对用户来说像一个完整统一的产品,我们还需要解决几个关键挑战。
特别复杂的地方在于:如何让平台看起来一致且无缝。这涉及到 导航、权限管理以及远程模块之间的通信等具体问题。
1. 通过 Shell 集中管理导航
为了让独立开发和维护的 Remotes 在导航上保持一致,我们在 Shell 中实现了集中化的导航模式。这样一来,就能更轻松地管理和扩展平台,而不会破坏用户体验。
-
Shell 负责路由定义和导航逻辑,所有 Remotes 必须遵循相同的结构,从而避免功能之间的不一致。
-
借助统一的设计系统,所有导航元素(如顶部栏、菜单、侧边栏)在位置和功能上保持一致。
-
新增 Remote 的过程也很简单:只需在 Shell 中注册即可 —— 无论它是一个新页面、一个弹窗,还是由其他 Remote 触发的侧边栏。
这种灵活性带来了更好的扩展性。例如,一个产品列表的远程组件能够在侧边栏中以另一个远程组件的形式打开产品详情。由于路由是基于权限的,不同角色(如供应商或财务人员)可以看到不同的详情 Remote,而无需在消费代码中写死复杂的条件逻辑。
2. 确保有效的权限管理
另一个挑战是如何控制访问权限,确保用户只看到与自己角色相关的内容,从而避免信息过载和安全风险。无论用户在哪个 Remote 中,这一点都必须成立。
为此,我们需要一个能在分布式架构下无缝运行的集中化权限系统,精确控制用户能访问的内容。
Inditex 使用内部的权限解决方案 Heimdal。为了支持微前端架构,Heimdal 引入了 组织(Organizations) 的概念 —— 这是一层确保所有 Remotes 之间权限管理一致的机制。Heimdal 组织的好处包括:
-
最小化信息过载
-
从架构层面保障安全
-
产品团队保持独立性的同时,仍能依靠集中化的访问控制
3. 让 Remotes 之间能够通信
最后一个关键问题是:如何在保持解耦的前提下,实现高效、实时的数据通信?不同的 Remotes 需要在不影响性能的情况下共享信息。
解决方案是:共享上下文(Context)+ 事件总线(Event Bus)。
共享上下文
由 Shell 管理,作为跨平台的数据空间(如用户偏好、全局筛选条件),保证所有 Remotes 都能访问相同的信息。
例如,在采购领域,用户的上下文可能包含:所属品牌(如 Zara)、产品类别(如鞋子)、所属部门(如童装)。根据用户的权限,Shell 会决定他能访问哪些功能,并提供相应的上下文。每个 Remote 使用该上下文去获取和展示相关数据,从而保证内容既准确又统一。
这个机制遵循 “事件上行、属性下发” 的模式:
-
Remotes 触发事件来更新上下文;
-
Shell 将更新后的数据作为 Props 下发;
-
当上下文发生变化时,Shell 会向所有已加载的 Remotes 广播事件,最大程度保持模块解耦。
上下文还支持不同作用域的工作区:
-
公共工作区:所有 Remotes 都能读写。
-
私有工作区:只属于单个 Remote,只有该模块能读写。
事件总线(Event Bus) 负责在 Shell 与 Remotes 之间,以及 Remotes 彼此之间进行实时通信。
例如,当用户在一个 Remote 中应用了筛选条件,事件总线会把它自动传递给其他 Remotes。
在订单创建向导(wizard)中,每一步(选择产品、选择供应商、输入数量等)由不同的 Remote 负责。一个专门的 编排 Remote(orchestrator) 负责整体流程控制。
-
用户操作时,Remotes 会触发事件传递给 orchestrator;
-
orchestrator 更新内部上下文,并决定下一步如何执行;
-
每个界面会根据上下文和用户角色动态调整,展示与之相关的信息。
在后台,orchestrator 还会通过服务保存用户的操作进度。这样用户可以中途退出,之后再回来时,所有上下文和数据都能恢复,继续上次的进度。

微前端在实践中的运作方式:IOP Product 的幕后故事
前面我们介绍了 IOP Product 的架构设计:为什么选择微前端,以及为了让它运转顺畅需要解决的挑战。
现在,让我们看看当用户登录时,IOP Product 在幕后是如何运行的:
1、Shell 向用户旅程服务(User Journey Service)发起请求,根据用户的角色和权限,确定其可访问的 Remotes。
2、Shell 再通过 REST 请求,从用户旅程服务获取用户被允许查看的 Remotes 列表。
3、Shell 处理返回的数据,并根据用户的身份(如采购员)和具体工作需求,组织菜单元素和界面入口,为用户提供个性化体验。
4、当用户发起操作时,Shell 会根据配置动态加载相应的 Remote,只加载必要的功能,从而优化性能。例如,用户选择进入 “订单管理” Remote。
5、一旦订单管理 Remote 加载完成,用户就能使用其功能并完成待办任务。
6、如果用户切换功能(如进入 “库存管理” Remote),Shell 会再次动态加载对应的 Remote。
7、事件总线(Event Bus API 让 Remotes 之间以及 Remotes 与 Shell 之间保持通信,确保整个操作流程流畅无缝。
8、用户进入库存管理 Remote,继续完成相关任务,并且整个体验在不同应用之间依然保持一致与高效。

在后台,Shell 实时动态组装平台,只选择并加载与用户角色和权限匹配的 Remotes。正是这种编排能力,把模块化架构转化为一个统一、响应迅速的使用体验。
为更多基于微前端的平台打下基础
在公司内部,还有很多场景可以通过微前端架构来提升效率、一致性和易用性。为了加速未来项目的开发,我们正在构建一套可复用的工具和库,作为平台的基础:
【第3143期】如何提升微前端场景下的研发效能?微前端管理平台的设计与实践
1、Shell 库(Shell Library):提供任何平台所需的核心功能,包括:
-
Shell 布局:确保不同平台之间的一致设计和结构。
-
导航系统:统一的导航,带来流畅一致的用户体验。
-
共享上下文:通用的数据模型,保证不同应用之间的数据一致性。
2、Shell 管理工具(Shell Admin):一款后台管理工具,帮助团队配置 Shell 根据用户权限加载哪些 Remotes。它还能扩展平台能力,例如集成聊天或 AI 助手,从而根据不同用户角色定制化体验。
构建 IOP Product 让我们明白:真正的模块化不仅仅是拆分代码,还在于 团队独立性与用户清晰体验之间的平衡。微前端给了我们灵活性,但真正让它发挥作用的,是开发与设计团队之间的紧密协作。
关于本文译者:@飘飘作者:@Inditex Tech原文:https://medium.com/@InditexTech/how-inditex-is-adopting-microfrontends-for-future-proof-platform-development-bc402652a2ba
