微前端(qiankun)

最近看到好多人都开始搞微前端啦,我也来玩儿一玩儿,大概看了一下,其实挺简单的,至少比我当初从mvc转mvvm要简单的多的多,好啦,废话不多说,直接开始。

看官网上面说,qiankun在vue3.0方面还是不是那么成熟,那么咱们创建vue的时候就先采用vue2.0+咯

先创建两个项目,一个主项目(qiankun-main)、一个子项目(qiankun-sub),咱们都采用vue了哈 

vue create qiankun-main

vue create qiankun-sub



接下来两个项目都要去下载qiankun这个包咯


cnpm i qiankun -S

准备工作做好啦。那咱们就开始正式进入qiankun的项目搭建啦

在主项目下面咱们可以新建一个文件,用来放置多个子应用的配置
const microQiankun = [
    {
        name:"sub-vue", //每个字应用都有一个唯一的name,不可重复
        entry:"//localhost:8090",
        container:"#subapp-viewpor", //字应用挂在的id,在app.vue中定义
        activeRule:"/subVue",
        props:{
            routerBase:"/我是从主应用传递过来的"
        }
    }
]
export default microQiankun;

然后咱们在主项目的main.js中,去引入,并且配置qiankun的相关配置咯

import Vue from 'vue'
import App from './App.vue'
import router from './router'

// registerMicroApps 注册子应用
// setDefaultMountApp 默认启动后进入的字应用
// start 启动乾坤
// initGlobalState 设置全局变量
import { registerMicroApps, start } from 'qiankun';
import microQiankun from './microQiankun';
Vue.config.productionTip = false
new Vue({
    router,
    render: h => h(App),
}).$mount('#app')
//注册子应用
registerMicroApps(microQiankun,{
    beforeLoad:app=>{ //加载子路由的生命周期
      console.log(app.name);
    },
    beforeMount:[
        app =>{
          console.log(app.name);
        }
    ],
    afterMount:[
      app => {
        console.log(app.name);
      }
    ],
    afterUnmount:[
      app =>{
        console.log(app.name);
      }
    ]

});  
start();  //启动qiankun

当然,咱们在路由里面还要有点注意的哦

import Vue from 'vue'
import Router from 'vue-router';
Vue.use(Router)
const router = new Router({
    mode:"history",    //history模式
    router:[],
    base:""    //这个是不需要路径的
})
export default router

 ----------------------------------到此为止,咱们主项目的配置就可以先告一段落啦----------------------------

现在开始子项目的配置啦 ,比主项目可能要麻烦那么一丢丢哈,开始子项目配置啦

大概分为四步

1、在 src 目录新增 public-path.js:

if (window.__POWERED_BY_QIANKUN__) {
    __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
// 这一块如果报错的话 需要在package.json中的eslintConfig中添加
/***
 * "globals": {
      "__webpack_public_path__": true
    },
 */




2、路由配置:

import Vue from 'vue'
import Router from 'vue-router';
import test from '../components/test'
Vue.use(Router)
const router = new Router({
    mode:"history",
    base:"/subVue",    //这个是必须要加的哦,用来匹配主项目中配置的activeRule
    routes: [
        {
            path: '/',
            component:test,    //记得自己新建模块哈
            
        },
    ]
})
export default router





3、打包配置修改(vue.config.js):

const { name } = require('./package');
module.exports = {
    devServer:{
        port:"8090",    //端口号对应的主项目中配置的entry 中的端口号
        headers: {  //这个是必须要写的
            'Access-Control-Allow-Origin': '*',
        },
        injectClient: false
    },
    configureWebpack: {
        output: {
          library: `${name}-[name]`,
          libraryTarget: 'umd', // 把微应用打包成 umd 库格式
          jsonpFunction: `webpackJsonp_${name}`,
        },
    },
}






4、入口文件 main.js 修改

import "./public-path"
import Vue from 'vue'
import App from './App.vue'
import router from  './router'
Vue.config.productionTip = false
let instance = null;
// 独立运行时
function render() {
  instance = new Vue({
    router,
    render: (h) => h(App),
  }).$mount('#qiankunApp'); //避免id重复哦
}
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}
export async function bootstrap() {
  console.log('[vue] vue app bootstraped');
}
export async function mount(props) {
  console.log('[vue] props from main framework', props);
  render(props);
}
export async function unmount() {
  instance.$destroy();
  instance.$el.innerHTML = '';
  instance = null;
}


-------------到这儿咱们的子项目也就配置完成咯,那么接下来试一下辛苦了这么就的效果吧-----------

接下来开始测试咯

在主项目中的App.vue中写入
<div id="app">
    <router-link to="/subVue">跳转至另一个项目</router-link>
    <router-link to="/mainVue">跳转至本项目中的路由</router-link>
    <!-- subapp-viewpor就是 microQiankun中子项目配置中container对应的id   这个是对应的子项目渲染,非子项目还是原先的写法-->
      <div id="subapp-viewpor"></div>
      <!-- 这个只是一个简单的小的测试例子  实际项目中咱们主项目也是有路由的 那么咱们主项目改怎么写还是怎么写哦 -->
      <router-view></router-view>
 </div>

到此为止、微前端(qiankun) 就结束咯 当然里面还有一些api。大家入个门 看起来就没有那么麻烦啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值