微前端改造

842 阅读2分钟

背景

公司现有框架基于angular1.3版本,即将接入vue,且现有系统臃肿且加载缓慢,提出微前端改造计划。

微前端介绍

微前端框架是基于开源框架qiankun搭建,适用于angular,vue,react框架接入。需提供一个html入口地址,如:http://127.0.0.1:8080/, 返回得是一个html内容,且微应用需支持跨域访问。根据注册的初始路由匹配加载相对应得子应用,路由使用hash模式,微应用路由需严格按照app名称前缀命名,可由微应用控制自己模块内部路由跳转。 微应用可以独立跑,可以根据window.__POWERED_BY_QIANKUN__变量判断当前环境是否在主框架内跑。微应用需提供三个生命周期的钩子函数:
bootstrap: 引导函数(对接 html,应用内容首次挂载到页面前调用,一次)
mount: 应用挂载时,每次挂在都会执行
unmount:应用卸载后,每次执行

微应用接入

angular1.3接入

老angular项目使用gulp进行打包处理静态资源 静态资源以工程名称为前缀进行代理转发

Vue接入

同样需要暴露三个钩子函数,且在render的时候挂在的id应设为自己appname,防止与其他应用冲突。

打包需要配置输出umd模式,Css使用不分离状态:

需要在子应用中设置静态资源路径,此配置应该在main.js最顶部引入:

Css:使用postcss进行样式隔离

应用通信

应用通信暂时仅状态共享方式进行,在mount函数中接收props参数.

定义监听state变化需要处理的函数:

权限管理

主应用提供一套request请求拦截,子应用可选择使不使用。如不使用同一套request的需要在自己子应用拦截器中处理权限管理及提示信息,当无权限时需要自行跳转登录页。

iframe接入

提供一个新的iframe微应用,里面嵌入iframe,根据props传入的iframeUrl进行渲染。

微应用之间路由跳转

Props参数中有个globalFunction下的globalRouter进行全局路由跳转,可以实现微应用间路由跳转

注意事项

  1. jquery因qinkun做的js隔离使用proxy代理访问window,因此在引入微应用的代码中避免使用defineProperty及defineProperties去监听window对象,jquery源码中有$.data()函数使用了监听window对象,需对源码改造,搜索defineProperties,做一层如下兼容:

2.bootstrap.js因为拆分多个微应用使用该ui框架,应用切换会导致绑定在document的事件多次绑定,所以在umount的时候将document的事件移除,每次使用懒加载方式加载bootstrap

后续持续更新...