Fronts 2.0
核心概念

Fronts 2.0 架构

运行时分层、所有权边界、依赖方向、挂载与替换事务,以及显式扩展点。

系统边界

Fronts 把逻辑应用引用变成受治理的应用实例。它刻意分层,让发布策略、代码传输、渲染框架和 执行隔离可以独立演进:

AppRef + ResolveContext


      AppResolver ───────────────► ResolvedApp<Source>


                              container 选择 AppLoader
                              ├─ @fronts/mf → 官方 MF instance
                              └─ iframe proxy → child agent + 自有 MF instance


                                  FrontsApp 协议

                         ┌──────────────┼──────────────┐
                         ▼              ▼              ▼
                       DOM          Shadow DOM       iframe
                         └──── scoped services + lifecycle ────┘


                         events、replacement、audit、cleanup

依赖规则

依赖只能向内:@fronts/core 不依赖框架、bundler 或 Module Federation;@fronts/mf 依赖 core, 并把公开的 @module-federation/runtime 声明为 peer;React/Vue3 包依赖 core,并 peer 对应框架。 示例负责组合软件包,软件包不能反向导入示例或平台策略。

任何 Fronts 源码都不得导入 @module-federation/runtime-core 私有边界。公开 Runtime package 是兼容契约;纯运行时 consumer 可直接依赖 @module-federation/runtime,不必引入 build plugin。

核心抽象

  • AppRef 是逻辑请求:name、expose、可选语义版本范围和 channel,不含 CDN URL。
  • ResolveContext 携带 environment、tenant、cohort、metadata,以及不可变 operation envelope; Host 不解释业务策略字段,resolver/registry 才负责选版本。
  • ResolvedApp<Source> 是不可变决策,包含规范化引用、opaque transport source、已选版本和 metadata。
  • AppLoader<Source> 负责 load() 与可选 preload(),返回 unknown module;Host 随后验证协议。
  • ContainerAdapter 准备执行目标并拥有清理,还能为 iframe 等容器选择专用 loader。
  • FrontsApp 是框架无关 producer contract;React/Vue 只是生成该契约的适配器。
  • FrontsHost 是有状态编排器,串起解析、加载、验证、service scope、容器、挂载、就绪、替换、 事件、审计与回收。

与 Module Federation 2 的所有权对照

能力MF 2Fronts
Manifest/Snapshot、资源图拥有视为 opaque runtime 行为
Remote 注册、expose 加载拥有通过适配器调用公开 instance API
Shared dependency 选择拥有不拦截
Runtime hook/plugin、远程类型、DevTools拥有只在自身边界关联 trace
官方 Bridge render/destroyBridge 拥有只拥有自身 ABI adapter
逻辑应用到部署的业务策略不规定resolver contract 拥有
跨 transport 生命周期不规定拥有
DOM/Shadow/iframe 策略不规定拥有
Host service 授权、就绪替换、泄漏审计不规定拥有

URL 重写、manifest fetch、script/link 创建、shared resolution 和 remote-load fallback 应使用 MF runtime plugin;环境、租户、cohort、channel 等业务部署选择使用 Fronts resolver。混合两类 职责会让缓存、回滚和观测都难以推理。

Host 挂载事务

Host 按顺序执行:规范化引用并生成 operation/identity/trace ID;解析部署;若配置了动态容器则 根据 resolved 生成 container request,随后选择默认或容器专用 loader;加载并验证应用协议; 为当前实例创建服务、授权声明的 capability 并构造可撤销 facade;准备容器;调用 mount(); 在 deadline 内等待 ready;最后才把实例发布为可用。

任何阶段失败都会以确定顺序回滚已经取得的资源。原始异常保持为主错误,清理异常通过带 phase 的 Fronts error 和事件另行呈现,不会覆盖根因。

替换事务

replace(currentId, nextOptions) 不是修改运行中的 MF cache。Host 先在目标内创建隐藏 staging slot,解析并挂载候选部署;候选未 ready 时失败,只销毁 staging,当前实例继续服务;候选 ready 后先提交新 slot,再卸载旧实例。旧实例清理失败单独返回,不能伪装成新应用未就绪。同一实例的并发 替换会被拒绝,从而保持清楚的事务边界。

扩展点与验证

可以实现 AppResolver 接 registry、ResolutionCache 接共享缓存、resolution-aware container 按 metadata 选择 iframe origin、AppLoader 接非 MF transport、ContainerAdapter 接新目标, 或把 HostEvent 映射到 OpenTelemetry。用 createServices 创建实例绑定能力并确定性释放,用 capabilityPolicy 按 identity、tenant、deployment 授权。所有扩展点都是显式对象,不是进程全局变量。

pnpm check 验证包边界、公开 exports、类型、生命周期和覆盖率;pnpm test:e2epnpm test:e2e:preview 分别验证开发服务和全新生产产物。源码权威边界位于 packages/core/srcpackages/mf/src

本页目录