前文有提到,在react中使用qiankun可以使用apiloadMicroApp,这里我们也用它来处理路由的跳转。
我们主要是在main-app中操作:
首先新建micro-app的view文件(每多一个子应用就新建一个):
然后使用react-router直接配置:
由于create-react-app默认没有直接提供react-router,我们手动下一个
npm install react-router react-router-dom --save
改完index.js长这样:
再试一下:
大功告成!
结论和源码
相比较上一次我们看见的 singlespa的配置要简单了很多,而且更加直白,新增子应用更加无缝。
需要demo源码的同学私信我哦
应用场景和坑
坑-静态资源问题解决
微应用打包之后 css 中的字体文件和图片加载如果使用的加载路径是相对路径,会导致css 中的字体文件和图片加载 404。
而 css 文件一旦打包完成,就无法通过动态修改 publicPath 来修正其中的字体文件和背景图片的路径。
主要有三个解决方案:
所有图片等静态资源上传至 cdn,css 中直接引用 cdn 地址(推荐)
借助 webpack 的 url-loader 将字体文件和图片打包成 base64(适用于字体文件和图片体积小的项目)(推荐)
使用绝对地址,nginx中设置静态目录
结束语
qiankun整体的思路是比较ok的,它大大简化了singlespa的使用逻辑,让微前端的门槛变得更低,但它仍然有一些缺点,例如部分api总是会有莫名其妙的问题,例如api文档不是特别的直观等,这些都是待改进的地方。而对于微前端来说,做到能够技术栈无关、渐进升级旧项目、分离不同业务等功能就已经能发挥它的最大价值了。