微前端----qiankun

简介: qiankun 是一个基于 single-spa 的微前端实现库,换句话说就是对single-spa进行了封装得到qiankun。qiankun就是将一个大应用拆分成好多小项目,qiankun解决了我们协同开发的一些问题,其次更方便于我们进行更新代码 。

1.qiankun是什么?它解决了哪些问题?


qiankun 是一个基于 single-spa微前端实现库,换句话说就是对single-spa进行了封装得到qiankun。

qiankun就是将一个大应用拆分成好多小项目,qiankun解决了我们协同开发的一些问题,其次更方便于我们进行更新代码 。


2.qiankun的实现原理及过程。


(1)监听路由变化

(2)匹配子应用

(3)加载子应用

(4)渲染子应用

我们可以简单概括为当匹配到activeRule的时候,请求获取entry资源,渲染到container中。


3.大家可以结合spa应用的父子组件对比的来理解qiankun


我们拿vue2的父子组件来简单分析一下。

qiankun首先也是在他的基座(主应用)注册子应用

子应用名称:父组件中子组件的名称

其次规定他的地址端口号(父子组件没有):获取entry的html资源

渲染子应用的容器container:父组件中子组件的占位符

触发加载子应用的路径activeRule:相当于子路由

子应用需要配置跨域:因为你这个端口号发生了变化

这个就是对小白来说方便理解这个qiankun,目前在微前端框架领域里,qiankun算是用的最好最多的。

4.qiankun实战配置。


1.首先创建主应用项目、微应用项目

2.主应用安装qiankun   npm i qiankun -S

我这次以react项目作为主应用、子应用是一个vue项目 一个react项目

第一步,在主应用里面注册子应用(在主应用的入口文件里)


import { registerMicroApps, start } from 'qiankun'; // 底层是基于single-spa
const loader = (loading) => {
    console.log(loading)
}
registerMicroApps([{
        name: 'm-vue',  // 子应用的名称
        entry: '//localhost:20000',  // 子应用的入口地址
        container: '#container',  // 渲染的容器
        activeRule: '/vue',  // 触发渲染的路径
        loader,
    },
    {
        name: 'm-react',
        entry: '//localhost:30000',
        container: '#container',
        activeRule: '/react',
        loader
    }
], {
    beforeLoad: () => {
        console.log('加载前')
    },
    beforeMount: () => {
        console.log('挂在前')
    },
    afterMount: () => {
        console.log('挂载后')
    },
    beforeUnmount: () => {
        console.log('销毁前')
    },
    afterUnmount: () => {
        console.log('销毁后')
    },
})
start({
    sandbox:{
        // experimentalStyleIsolation:true
        strictStyleIsolation:true
    }
});


第二步,在主应用的出口文件添加触发子应用的路径


import {BrowserRouter as Router,Link} from 'react-router-dom'
function App() {
  return (
    <div className="App">
        <Router>
          <Link to="/vue">vue应用</Link>
          <Link to="/react">react应用</Link>
        </Router>
         {/* 切换导航, 将微应用渲染container容器中 */}
        <div id="container"></div>
    </div>
  );
}
export default App;


第三步,子应用里面的配置vue.config.js


module.exports = {
    publicPath: '//localhost:20000', //保证子应用静态资源都是像20000端口上发送的
    devServer: {
        port: 20000, // fetch
        headers:{
            'Access-Control-Allow-Origin': '*'
        }
    },
    configureWebpack: { // 需要获取我打包的内容  systemjs=》 umd格式
        output: {
            libraryTarget: 'umd',
            library: 'm-vue'// window['m-vue']
        }
    }
}


第四步,子应用里面的main.js


import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue'
import routes from './router'
// 不能直接挂载 需要切换的时候 调用mount方法时候再去挂载
let history;
let router;
let app;
function render(props = {}){
    history =  createWebHistory('/vue');
    router = createRouter({
        history,
        routes
    });
    app = createApp(App);
    let {container} = props; // 默认他会拿20000端口的html插入到容器中,
    app.use(router).mount(container ? container.querySelector('#app'):'#app')
}
// 乾坤在渲染前 给我提供了一个变量 window.__POWERED_BY_QIANKUN__
if(!window.__POWERED_BY_QIANKUN__){ // 独立运行自己
render();
}
// 需要暴露接入协议
export async function bootstrap(){
    console.log('vue3 app bootstraped');
}
export async function mount(props){
    console.log('vue3 app mount',);
     render(props)
}
export async function unmount(){
    console.log('vue3 app unmount');
    history = null;
    app = null;
    router = null;
}


这是一个简单的实战配置,关注我,下一篇文章整理qiankun的源码,更加彻底的掌握qiankun,大家有啥建议或者观点欢迎评论区留言。



相关文章
|
前端开发
在微前端qiankun中使用Vite你踩坑了吗?(下)
哈喽,我是树酱。之前搭建的微前端体系已经稳步运行将近两年了,最近遇到一些童鞋反馈。之前据说qiankun并不支持Vite打包的应用,那是不是我就无法使用了?
3025 0
在微前端qiankun中使用Vite你踩坑了吗?(下)
|
缓存 资源调度 前端开发
微前端-qiankun:vue3-vite 接入 vue3、nuxt3、vue2、nuxt2等子应用
微前端-qiankun:vue3-vite 接入 vue3、nuxt3、vue2、nuxt2等子应用
1328 0
|
30天前
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
280 8
|
28天前
|
前端开发 JavaScript 开发者
qiankun(乾坤)微前端框架简介
qiankun(乾坤)微前端框架简介
79 1
|
1月前
|
前端开发 JavaScript
轻松上手:基于single-spa构建qiankun微前端项目完整教程
轻松上手:基于single-spa构建qiankun微前端项目完整教程
39 0
|
6月前
|
前端开发 JavaScript 容器
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
246 0
|
资源调度 前端开发
微前端-qiankun:nuxt2 接入 nuxt2
微前端-qiankun:nuxt2 接入 nuxt2
140 0
|
6月前
|
资源调度 前端开发 JavaScript
手把手带你实现简单的微前端qiankun搭建
手把手带你实现简单的微前端qiankun搭建
228 0
|
前端开发 JavaScript
微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用
微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用
684 0
|
前端开发 JavaScript Java
基于qiankun的微前端最佳实践 -(同时加载多个微应用)
基于qiankun的微前端最佳实践 -(同时加载多个微应用)
4711 0
基于qiankun的微前端最佳实践 -(同时加载多个微应用)