原生 ES Module 运行时
子应用即普通 Vite 应用,以 <script type="module"> 动态加载。无 Webpack Runtime 依赖、不使用 Module Federation,调试即普通 Web 调试。
了解运行时模型
是什么 —— 一个以 Angular 为门户、框架无关为目标的微前端运行时:Portal 门户 + N 个独立开发/独立部署的子应用,在浏览器运行时组装为一个整体。
技术形态 —— 子应用本质是普通 Vite 应用,以原生 ES Module 方式动态加载,不依赖 Webpack Runtime,不使用 Module Federation 作为运行时组装方案。
框架立场 —— Angular 21 Zoneless 门户、Signal 驱动;Angular / Vue / React / Web Component / 纯 JavaScript 子应用均可接入。
能力组合 —— 双模式沙箱、EventBus + RPC + SharedState 通信、L1/L2/L3 多级缓存、统一 HTTP 管道、认证单飞刷新、地图集成层、跨应用组件复用与 11 项界面无关企业服务,收敛为 5 个可发布包按需引入。
加载链关键事实:子应用入口由 <script type="module"> 注入加载,子应用调用 defineMfeApp(name, lifecycle) 注册生命周期(bootstrap / destroy 必选,activate / deactivate / navigateByUrl 可选),宿主通过 mfe:lifecycle-defined 事件 + 指数退避轮询完成握手。开启 coexist: true 的子应用卸载后进入 HIDDEN 状态停放到隐藏容器,再次激活零引导成本,超出的按 LRU 淘汰并彻底销毁。
| 能力 | Angular | Vue | React | Web Component | 纯 JavaScript |
|---|---|---|---|---|---|
运行时加载与生命周期(defineMfeApp) | ✅ | ✅ | ✅ | ✅ | ✅ |
| 官方适配器子路径 | adapters/angular | adapters/vue | adapters/react | 无需适配器 | 无需适配器 |
| 响应式状态桥 | Signal 桥 createSharedStateBridge | createSharedStateComposable | createSharedStateHook(useSyncExternalStore) | 直接调用 ctx.sharedState | 直接调用 ctx.sharedState |
| 事件总线接入 | createEventBridge | createEventBusComposable | createEventBusHook | ctx.eventBus | ctx.eventBus |
| ACL 指令 / 守卫 | createAclGuard + createAclChecker | v-acl 指令 + createMfeAclGuard | createAclRouteCheck | ctx.acl | ctx.acl |
| HTTP 管道桥 | createHttpPipelineInterceptor | createMfeAxiosInterceptors | createMfeFetch | ctx.httpPipeline | ctx.httpPipeline |
| i18n 翻译 | createI18nTranslator | createI18nComposable | createI18nHook | ctx.i18n.fanyi | ctx.i18n.fanyi |
Mock 规则注册(registerAppMockRules) | ✅ | ✅ | ✅ | ✅ | ✅ |
| 跨应用组件注册与消费 | ✅ | ✅ | ✅ | ✅ | ✅ |
表中能力均对应仓库内可运行的示例:examples/ 下 5 个子应用(Angular / Vue / React / Web Component / 纯 JS)在 4201–4205 端口独立启动,由 4200 端口的 Portal 统一编排。
git clone https://github.com/echemoo/ng-mfe.git
cd ng-mfe
bun install # 或 npm install
npm run examples:start # 并行启动 portal + 5 个子应用(4200-4205)访问 http://localhost:4200,演示账号:
| 账号 | 密码 | 权限 |
|---|---|---|
admin | admin123 | 全部权限(roles: admin、user) |
user | user123 | 基本权限(用户/项目查看与编辑) |
guest | guest123 | 只读权限 |
npm run demo # Node 端(jsdom)一键演示框架全能力,无需浏览器
npm run test # 全量测试(单元 + 集成,约 1900 用例)
npm run e2e # Playwright 端到端(109 用例)不想启动浏览器?npm run demo 在 Node 端以 jsdom 依次演示:服务初始化 → AuthCoordinator 协调 → I18n → 菜单 ACL 过滤 → HTTP 管道 + CRUD Mock → 三个纯 DOM 子应用编排 → coexist 保活 → EventBus/RPC → 受保护 SharedState → 缓存命中率 → 沙箱隔离 → 销毁清理。
| 你是谁 | 推荐路线 |
|---|---|
| 🔰 零基础 | 什么是微前端 → 快速上手 → 核心概念 |
| 🚀 想快速上手 | 快速上手 → 教程 → 子应用开发 |
| 🏗️ 理解架构 | 总体架构 → 生命周期与加载链 → 沙箱 → 设计决策 |
| 🧩 二次开发 | 扩展指南 → API 参考 → 参与贡献 |