返回

umi+plugin-qiankun 微应用前端实践含源码

前端

微应用

微应用是一种前端架构模式,它将一个大型单体应用分解成多个独立的、可复用的小应用,每个小应用都有自己的代码库、路由和状态管理。微应用可以独立开发、部署和维护,并且可以根据业务需要进行灵活组合。

umi

umi 是一个用于构建企业级前端应用的框架,它集成了路由、状态管理、数据请求、按需加载、热更新等多种功能,极大地简化了前端开发的复杂度。

plugin-qiankun

plugin-qiankun 是一个微应用框架,它提供了一套完整的微应用开发和管理解决方案。plugin-qiankun 可以将多个微应用集成到一个主应用中,并实现微应用之间的路由、状态管理和通信。

实践

初始化主应用

首先,使用 umi pro 来快速初始化主应用。umi pro 是一个命令行工具,它可以帮助我们快速生成一个开箱即用的 umi 项目。

npx umi new my-app --pro

创建子应用

接下来,使用 umi 来创建子应用。

cd my-app
npx umi g sub-app my-sub-app

实现路由嵌套

在主应用中,我们可以使用 <Route> 组件来配置路由。在子应用中,我们可以使用 <BrowserRouter> 组件来配置路由。

// 主应用的路由配置
import { Route } from 'react-router-dom';

export default () => (
  <div>
    <Route path="/" component={MainApp} />
    <Route path="/sub-app" component={SubApp} />
  </div>
);
// 子应用的路由配置
import { BrowserRouter, Route } from 'react-router-dom';

export default () => (
  <BrowserRouter>
    <Route path="/" component={SubApp} />
  </BrowserRouter>
);

实现通信

在主应用和子应用之间,我们可以使用 window.postMessage() 来实现通信。

// 主应用向子应用发送消息
window.postMessage({ type: 'message', data: 'hello from main app' }, '*');

// 子应用接收主应用的消息
window.addEventListener('message', (event) => {
  if (event.data.type === 'message') {
    console.log(`message from main app: ${event.data.data}`);
  }
});
// 子应用向主应用发送消息
window.postMessage({ type: 'message', data: 'hello from sub app' }, '*');

// 主应用接收子应用的消息
window.addEventListener('message', (event) => {
  if (event.data.type === 'message') {
    console.log(`message from sub app: ${event.data.data}`);
  }
});

源码

完整的源码可以参考:https://github.com/umijs/umi-plugin-qiankun

总结

本文分享了使用 umi+plugin-qiankun 实现微应用前端实践的经验,包括如何使用 pro 来快速初始化主应用,如何使用 umi 创建子应用,如何实现父子路由的嵌套以及父子之间的通信。同时提供了源码供大家参考。

微应用架构是一种非常适合大型前端应用开发的架构模式,它可以帮助我们降低开发和维护的复杂度,提高应用的可扩展性和灵活性。umi 和 plugin-qiankun 是两个非常优秀的微应用框架,它们可以帮助我们轻松构建微应用系统。