# micro-app-front-end **Repository Path**: echo-52hz/micro-app-front-end ## Basic Information - **Project Name**: micro-app-front-end - **Description**: 基于 micro-app(https://jd-opensource.github.io/micro-app/) 框架构建企业级微前端模板 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-01 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # micro-app 企业级微前端模板 基于京东 **micro-app** 框架的企业级微前端项目模板,提供完整的主子应用通信、路由同步、多环境配置等核心功能。 ## 项目概述 本项目采用简洁的项目结构,包含 1 个主应用和 3 个子应用,充分利用 micro-app 的原生路由模式和内置通信机制,提供开箱即用的微前端解决方案。 ### 技术栈 - **微前端框架**: @micro-zoe/micro-app (基于 WebComponent) - **前端框架**: Vue 3 + TypeScript - **构建工具**: Vite - **路由**: Vue Router 4 (createWebHistory + native 模式) - **包管理器**: pnpm ## 项目结构 ``` micro-app/ ├── main-app/ # 主应用(基座应用) │ ├── src/ │ │ ├── components/ # 组件目录 │ │ ├── config/ # 配置文件(子应用配置) │ │ ├── router/ # 路由配置 │ │ ├── views/ # 页面组件 │ │ ├── types/ # TypeScript 类型定义 │ │ ├── composables/ # 组合式函数 │ │ ├── App.vue # 根组件 │ │ └── main.ts # 入口文件 │ ├── .env.development # 开发环境配置 │ ├── .env.production # 生产环境配置 │ ├── vite.config.ts # Vite 配置 │ └── package.json │ ├── sub-app-1/ # 子应用 1 │ ├── src/ │ │ ├── router/ # 路由配置 │ │ ├── views/ # 页面组件 │ │ ├── utils/ # 工具函数(环境检测) │ │ ├── composables/ # 组合式函数(数据通信) │ │ ├── App.vue # 根组件 │ │ └── main.ts # 入口文件(支持独立运行) │ ├── .env.development # 开发环境配置 │ ├── .env.production # 生产环境配置 │ ├── vite.config.ts # Vite 配置 │ └── package.json │ ├── sub-app-2/ # 子应用 2(结构同 sub-app-1) ├── sub-app-3/ # 子应用 3(结构同 sub-app-1) ├── package.json # 根目录配置(一键启动脚本) └── README.md # 项目说明文档 ``` ## 快速开始 ### 环境要求 - Node.js >= 18.0.0 - pnpm >= 8.0.0 ### 安装依赖 在项目根目录执行: ```bash # 安装根目录依赖 pnpm install # 安装所有应用的依赖 pnpm run install:all ``` ### 启动项目 #### 一键启动所有应用(推荐) ```bash pnpm run dev ``` 这将同时启动: - 主应用:http://localhost:5173 - 子应用 1:http://localhost:3000 - 子应用 2:http://localhost:3001 - 子应用 3:http://localhost:3002 #### 单独启动某个应用 ```bash # 仅启动主应用 pnpm run dev:main # 仅启动子应用 1 pnpm run dev:sub1 # 仅启动子应用 2 pnpm run dev:sub2 # 仅启动子应用 3 pnpm run dev:sub3 ``` ### 构建项目 ```bash # 构建所有应用 pnpm run build # 单独构建某个应用 pnpm run build:main pnpm run build:sub1 pnpm run build:sub2 pnpm run build:sub3 ``` ### 预览构建结果 ```bash # 构建并预览所有应用 pnpm run preview ``` ## 核心功能 ### 1. 主子应用通信 micro-app 提供了内置的数据通信 API,无需额外配置: **主应用向子应用发送数据**: ```typescript // 通过 :data 属性传递初始数据 // 通过 setData 动态发送数据 microApp.setData('sub-app-1', { message: 'Hello' }) ``` **子应用接收主应用数据**: ```typescript // 获取数据 const data = window.microApp.getData(); // 监听数据变化 window.microApp.addDataListener((data) => { console.log("收到主应用数据:", data); }); ``` **子应用向主应用发送数据**: ```typescript window.microApp.dispatch({ type: "event", payload: "data" }); ``` **主应用接收子应用数据**: ```typescript microApp.addDataListener("sub-app-1", (data) => { console.log("收到子应用数据:", data); }); ``` ### 2. 路由同步 micro-app 使用原生路由模式,自动处理路由同步: **主应用配置**: ```typescript // 配置子应用路由 { path: '/sub-app-1/:subpath*', component: SubApp1View } // 使用 native 模式 ``` **子应用配置**: ```typescript // 使用 createWebHistory(与独立运行一致) const router = createRouter({ history: createWebHistory(window.__MICRO_APP_BASE_ROUTE__ || "/"), routes, }); ``` ### 3. 跨应用导航 子应用可以通过数据通信请求主应用进行跨应用导航: ```typescript // 子应用发送导航请求 window.microApp.dispatch({ type: "navigate", appName: "sub-app-2", path: "/about", }); // 主应用监听并处理 microApp.addDataListener((data) => { if (data.type === "navigate") { router.push(`/${data.appName}${data.path}`); } }); ``` ### 4. 环境配置 项目支持多环境配置,通过环境变量灵活控制: **开发环境** (`.env.development`): ```env VITE_DEPLOY_MODE=development VITE_SUB_APP_1_ENTRY=//localhost:3000 VITE_SUB_APP_2_ENTRY=//localhost:3001 VITE_SUB_APP_3_ENTRY=//localhost:3002 ``` **生产环境** (`.env.production`): ```env VITE_DEPLOY_MODE=same-origin # 或跨域部署 # VITE_DEPLOY_MODE=cross-origin # VITE_SUB_APP_1_ENTRY=//sub1.example.com ``` ### 5. 子应用独立运行 所有子应用都支持独立运行,便于开发调试: ```typescript // 环境检测 function isMicroAppEnvironment() { return window.__MICRO_APP_ENVIRONMENT__; } // 独立运行时直接挂载 if (!isMicroAppEnvironment()) { render(); } // 微前端环境导出生命周期函数 window.mount = () => render(); window.unmount = () => app.unmount(); ``` ## 可用脚本 | 脚本 | 说明 | | ------------------------- | ---------------------------- | | `pnpm run install:all` | 安装所有应用的依赖 | | `pnpm run dev` | 一键启动所有应用(开发模式) | | `pnpm run dev:main` | 仅启动主应用 | | `pnpm run dev:sub1/2/3` | 仅启动指定子应用 | | `pnpm run build` | 构建所有应用 | | `pnpm run build:main` | 仅构建主应用 | | `pnpm run build:sub1/2/3` | 仅构建指定子应用 | | `pnpm run preview` | 构建并预览所有应用 | ## 开发指南 ### 添加新的子应用 1. 复制现有子应用目录(如 `sub-app-1`) 2. 修改 `package.json` 中的项目名称 3. 修改 `vite.config.ts` 中的端口号 4. 在主应用的 `src/config/microApps.ts` 中添加配置 5. 在主应用的路由中添加对应路由 6. 在根目录 `package.json` 中添加启动脚本 ### 调试技巧 1. **查看通信数据**:在浏览器控制台使用 `window.microApp.getData()` 查看数据 2. **查看子应用状态**:micro-app 会在控制台输出生命周期日志 3. **独立调试子应用**:直接访问子应用端口(如 http://localhost:3000) 4. **路由调试**:检查 `window.__MICRO_APP_BASE_ROUTE__` 确认基础路由 ## 常见问题 ### 1. 子应用加载失败 **原因**: - 子应用未启动 - 端口配置错误 - CORS 配置问题 **解决方案**: - 确保子应用已启动 - 检查 `vite.config.ts` 中的端口配置 - 检查 Vite 的 CORS 配置 ### 2. 路由不同步 **原因**: - 未配置 `router-mode="native"` - 子应用使用了错误的路由模式 **解决方案**: - 确保主应用使用 `` - 确保子应用使用 `createWebHistory` ### 3. 样式冲突 **原因**: - 全局样式污染 **解决方案**: - micro-app 默认提供样式隔离 - 使用 scoped 样式或 CSS Modules - 避免使用全局样式选择器 ### 4. 通信数据未接收 **原因**: - 监听器未正确注册 - 数据发送时机错误 **解决方案**: - 确保在子应用挂载后注册监听器 - 使用 `autoTrigger: true` 自动触发初始数据 ## 部署指南 ### 同域部署 所有应用部署在同一域名下: ``` https://example.com/ # 主应用 https://example.com/sub-app-1 # 子应用 1 https://example.com/sub-app-2 # 子应用 2 https://example.com/sub-app-3 # 子应用 3 ``` ### 跨域部署 子应用部署在不同域名: ``` https://main.example.com/ # 主应用 https://sub1.example.com/ # 子应用 1 https://sub2.example.com/ # 子应用 2 https://sub3.example.com/ # 子应用 3 ``` 需要配置 CORS 头: ```nginx add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; ``` ## 相关文档 ### 项目文档 - [踩坑记录](./docs/TROUBLESHOOTING.md) - 实现过程中遇到的问题和解决方案 - [实现过程记录](./docs/IMPLEMENTATION_LOG.md) - 完整的实现过程和技术决策 ### 官方文档 - [micro-app 官方文档](https://micro-zoe.github.io/micro-app/) - [Vue 3 文档](https://cn.vuejs.org/) - [Vite 文档](https://cn.vitejs.dev/) - [Vue Router 文档](https://router.vuejs.org/zh/) ## 许可证 MIT ## 贡献 欢迎提交 Issue 和 Pull Request!