qiankun

  • 前言
  • bug
  • qiankun实战
  • 总结
  • qiankun中的沙箱机制

前言

qiankun 框架是基于single-spa框架的,所以遵循的协议都一样,也是向外暴露三个钩子函数,但是qiankun 在single-spa的基础上进行了改进:
1,与技术栈无关
2,解决了single-spa的隔离问题,css隔离,js隔离
3,js沙箱机制
4,可以预加载子应用
5,主应用也无需构建请求,内部封装了fecth请求,只需要子应用配置跨域就行

bug

昨天晚上开始写,不断遇见bug,解决一个又会遇见另外一个,真好。今天早上才解决完成,主要遇到的问题是react子应用上的bug,好久没用react了,版本问题,配置问题都有。

一:子应用挂载dom的问题
这次qiankun实战使用vue作为主应用,子应用有vue,react技术栈,这就出现问题了,vue作为主应用,vue也构建了子应用,都是挂载到id 为app的容器上,本来子应用应该是挂载到自己的HTML上,然后再挂载到主应用的容器上,结果出现了子应用挂载到主应用id 为app 的容器上,覆盖主应用,所以子应用应该配置与子应用不一样的挂载id

配置前:

配置后:

二:在配置好react子应用时,npm start可以运行,但是在groom浏览器就是不显示页面
报错:Cannot read property ‘forEach’ of undefined

解决:跟新groom 中react-devtools工具,版本问题

三:配置react子应用,主应用请求重定向为子应用绝对路径
报错:webpack_public_path is not defined

解决:eslint的问题

"eslintConfig": {"extends": ["react-app","react-app/jest"],"globals": {"__webpack_public_path__": true}},

qiankun实战

1,构建主应用,子应用

// 构建主应用
vue create qiankun-base
// 构建vue子应用
vue create child-vue
//构建react子应用
create-react-app child-react

2,主应用安装qiankun,这里子应用无需安装其他插件

npm i qiankun --save

3,配置路由,可以原生也可以使用UI库

npm i element-ui --save

4,配置主应用,注册子应用,在主应用中声明两个容器接收子应用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);import { registerMicroApps, start } from 'qiankun';registerMicroApps([{name: 'reactApp',   //子应用的名字entry: '//localhost:3020',  // 子应用的路径container: '#react',  // 装载子应用的容器activeRule: '/react',  // 路由匹配},{name: 'vueApp',entry: '//localhost:3010',container: '#vue',activeRule: '/vue',}
]);
// 启动 qiankun
start();Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')// 乾坤主应用会根据配置项,主动发起fecth请求,加载子应用,所以配置子应用的时候,需要解决跨域

5,配置vue子应用

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falselet instance = null;
function render () {instance = new Vue({router,render: h => h(App)}).$mount('#app-vue')}if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {render();
}export async function bootstrap() {}
export async function mount() {render();
}
export async function unmount() {instance.$destroy();
}

配置vue.config.js

module.exports = {devServer: {headers: {'Access-Control-Allow-Origin': '*',},port:3010},configureWebpack: {output: {library: `vueApp`,libraryTarget: 'umd', // 把微应用打包成 umd 库格式},},
};

vue子应用中有路由,记得修改路由base

6,配置react子应用


import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root'));
// 定义一个渲染函数,方便主应用调用和子应用自己运行
function render () {ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root'));
}if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}if (!window.__POWERED_BY_QIANKUN__) {render();
}export async function bootstrap() {}export async function mount() {  // 挂载子应用render();
}export async function unmount() {// 卸载子应用ReactDOM.unmountComponentAtNode(document.getElementById('root'))
}reportWebVitals();

创建配置文件config-overrides.js

module.exports = {webpack: (config) => {config.output.library = `reactApp`;config.output.libraryTarget = 'umd';config.output.globalObject = 'window';config.output.publicPath = `http://localhost:3020/`return config;},devServer: (configFunction) => {return function (proxy,allowedHost){const config = configFunction(proxy,allowedHost);config.headers = {"Access-Control-Allow-Origin":'*'}return config}},
}

注意修改eslint中的配置

7,分别运行主,子应用

总结

通过qiankun实现微前端,比single-spa性能更好,上手更容易。总体来说搭建一个微前端应用不是很难,不管是single-spa还是qiankun。
qiankun官网:官方文档

qiankun中的沙箱机制

什么是沙箱机制?
沙箱就是应用运行的环境,在沙箱中运行的应用,不会影响外界应用,当沙箱中的应用卸载后,主应用可以还原之前的状态。这就是为什么主应用加载微应用,显示完微应用,可以看到之前的主应用。原来主应用的js,css都被缓存起来了。

一:快照沙箱
当页面不支持Proxy,使用快照沙箱,也是代理的意思,原生只能创建一个。
二:Proxy沙箱
使用es6中的Proxy实现代理,可以支持创建多个沙箱。

微前端之qiankun相关推荐

  1. 目标是最完善的微前端解决方案 - qiankun 2.0

    距  qiankun 开源已过去了 11 个月,距上次官方  发声 已过去 8 个月. Announcing qiankun@2.0 2019 年 6 月,微前端框架 qiankun 正式发布了 1. ...

  2. 深入浅出解析阿里成熟的微前端框架 qiankun 源码【图文并茂】

    来源:leaf(a1029563229 ) https://github.com/a1029563229/blogs/blob/master/Source-Code/qiankun/1.md 本文将针 ...

  3. 深入浅出解析阿里成熟的微前端框架 qiankun 源码

    本文将针对微前端框架 qiankun 的源码进行深入解析,在源码讲解之前,我们先来了解一下什么是 微前端. 微前端 是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的 ...

  4. 万字长文+图文并茂+全面解析微前端框架 qiankun 源码 - qiankun 篇

    写在开头 微前端系列文章: 基于 qiankun 的微前端最佳实践(万字长文) - 从 0 到 1 篇 基于 qiankun 的微前端最佳实践(图文并茂) - 应用间通信篇 基于 qiankun 的微 ...

  5. 微前端框架qiankun项目实战(一)--本地开发篇

    ❝ 作者:黑化程序员 https://juejin.cn/post/6970310177517993998 ❞ 大家好,我是小黑. 公司使用技术栈是vue,最近遇到了一个需求,要把原有后台管理系统的功 ...

  6. 微前端框架qiankun之原理与实战

    目录 一.微前端概述 1. 基本原理 2. 微前端的主要优势 3. 当前微前端方案的一些缺点 二.qiankun与single-spa实现原理 1. single-spa实现原理 (1). 路由问题 ...

  7. iframe 接班人-微前端框架 qiankun 在中后台系统实践

    「福利」 ✿✿ ヽ(°▽°)ノ ✿:文章最后有抽奖,转转纪念 T 恤,走过路过不要错过哦 背景 在转转的中台业务中,交易流转.业务运营和商户赋能等功能,主要集中在两个系统中(暂且命名为 inner/o ...

  8. 微前端之 qiankun 入门、上手、实战(构建大型 web 应用)

    目录 前言 正文 一.介绍 微前端 qiankun 二.快速上手 ​☛主应用 ① 安装 qiankun ② 在主应用中注册微应用 ​☛微应用 ① 导出相应的生命周期钩子 ② 配置微应用的打包工具 三. ...

  9. 微前端框架qiankun开发到部署保姆式教程原理与实战

    废话不多说先了解下在实践. 1. 什么是微前端 web应用构建方式 微前端 微前端在2016年ThoughtWorks Technology Radar正式被提出.微服务这个被广泛应用于服务端的技术范 ...

最新文章

  1. Django框架之初识
  2. python爬虫系列之数据的存储(二):csv库的使用
  3. java post 打开新页面_JAVA后台POST/GET访问方法
  4. 当我们在聊 Serverless 时你应该知道这些
  5. linux程序获取透传参数,Linux内核中TCP SACK处理流程分析
  6. 【Ogre-windows】旋转矩阵及位置解析
  7. java解析excel文件_1.3.1 python解析excel格式文件
  8. 我用Python帮朋友做了张猪肉数据分析图,结果。。。
  9. BZOJ 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复(最大生成树)
  10. 小组第十三次站立会议
  11. 洛谷——P1534 不高兴的津津(升级版)
  12. RDB 和 AOF 持久化的原理是什么?我应该用哪一个?它们的优缺点? 1
  13. nginx-status详解
  14. paip.rmvb视频的无损分割与截取
  15. 路由器刷openwrt固件准备工作
  16. 一款高颜值的词云包让我拍案叫绝
  17. 分布式光伏运维服务器,分布式光伏电站专业运维管理
  18. windows7 配置php开发环境
  19. 设计模式六大原则之--里氏替代原则(LSP)
  20. InfluxDB CQ时间偏移

热门文章

  1. python3爬虫初探(四)之文件保存
  2. 通俗理解生成对抗网络GAN
  3. 如何让ios app支持32位和64位?
  4. AXURE RP EXTENSION For Chrome
  5. OSChina 周四乱弹 ——我高考,媳妇还在读小学
  6. win下php5.4安装ffmpeg-php扩展
  7. 《大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享》_DCCI
  8. 腾达tenda无线路由器网络拓展wds功能实战配置手册
  9. 动态代理的简单实例.
  10. Centos7 WARNING: ‘aclocal-1.15‘ is missing on your system.