# microapp-cli **Repository Path**: borderWusu/microapp-cli ## Basic Information - **Project Name**: microapp-cli - **Description**: microapp搭建的简易cli - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-18 - **Last Updated**: 2024-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 试用MicroApp微前端框架 #### 此示例提供了一个大体方案,主要由一个大文件包裹三个文件组成,大文件用来管理全局包,内部其中 common 是公共文件库,microapp-cli和vite-project为父子应用双系统,只处理了vite + vite项目,react项目还需要在此基础上再加处理 > 使用pnpm来管理依赖文件 ### 项目结构 - microapp-parent - pnpm.workspace.yaml 管理 pnpm install时 需要拉取哪些项目的依赖 - package.json 管理脚本依赖 - nginx.conf 部署nginx配置 - common文件 管理整体公用模块 - node_modules 公有依赖 - types 公有类型声明文件 - ... - vite.config.ts 公有plugins和配置 - microapp-cli 主应用 - .vscode vscode私有化配置 - node_modules 应用所需依赖,由pnpm使用软链接统一处理 - public 主应用静态文件 - src - router 主应用路由模块 - views 主应用页面存放 - App.vue - main.ts 主应用入口 - .env.development 开发环境env配置 - .env.production 生产环境env配置 - tsconfig.json 不耦合配置文件,防止定制化处理情况 - vite.config.ts 引入公共模块中的配置,可以加入定制化属性处理 - vite-project 子应用 - .vscode vscode私有化配置 - node_modules 应用所需依赖,由pnpm使用软链接统一处理 - public 主应用静态文件 - src - assets 静态资源存放 - router 子应用路由模块 - views 子应用页面存放 - App.vue - main.ts 主应用入口 - .env.development 开发环境env配置 - .env.production 生产环境env配置 - tsconfig.json 不耦合配置文件,防止定制化处理情况 - vite.config.ts 引入公共模块中的配置,可以加入定制化属性处理 ### 写法 > 子应用作为页面展示时
> 主应用在router中为子应用声明路由对象,如果子应用中还有子页面,在path后面拼接/:page:*
> 主应用直接以iframe方式放置标签就可以了 ```javascript // vite项目JS沙箱解决方案:加入iframe ``` #### 路由 > microapp父应用路由正常展示,子应用路由在后面拼接子应用名字=子路由来进行query方式展示 #### 路由跳转 > 主应用和子应用都按照router.push的方式跳转当前应用的路由,两个应用相互调用时会不太一样 ```javascript // 主应用控制子应用的跳转 import microApp from "@micro-zoe/micro-app"; microApp.router.push({ name: "子应用自定义名称", path: "需要跳转的子应用路由", }); // 子应用控制主应用的跳转 // 获取主应用的路由 const baseRouter = window.microApp.router.getBaseAppRouter() baseRouter.主应用路由跳转方法(...) // 控制其他子路由跳转 window.microApp.router.push({name: '子应用名称', path: '跳转地址', replace: 是否使用replace模式 }) ``` #### 通讯 > 主应用和子应用相互通信时,传递信息结束后需要清除当前信息后才可以进行下次通信,除使用强制发送forceSetGlobalData,不过不管是怎样传递数据,都需要手动清除数据,不然会一直留存 ```javascript import microApp from "@micro-zoe/micro-app"; // 父应用向子应用发送消息 microApp.setData("子应用名称", 向子应用发送的数据对象, (子应用回调参数) => {}); // 子应用接收数据 监听 window.microApp.addDataListener((数据) => { return '向父应用返回回调参数' }) // 子应用向父应用传递信息 window.microApp.dispatch(向父应用传递的信息对象, () => {}) // 父应用接收信息 监听 microApp.addDataListener('子应用名称', (子应用传递的参数) => {}) // 父子应用双向传递 // 父应用 microApp.setGlobalData(向子应用传递的数据对象); microApp.addGlobalDataListener((子应用传递的数据) => {}) // 子应用 window.microApp.setGlobalData(向父应用传递的数据对象); microApp.addGlobalDataListener((父应用传递的数据) => {}) // 强制推送数据 window.microApp.forceSetGlobalData(向父应用强制推送的数据对象) // 清除数据 microApp.clearData('子应用名称') ```