微前端 qiankun

本文详细介绍了如何在项目中使用Qiankun实现微前端,包括Qiankun的安装、设置默认子应用、注册子应用、子应用的钩子函数、路由配置以及webpack的跨域和UMD打包配置。
摘要由CSDN通过智能技术生成

微前端 qiankun使用梳理:

1、基座 :

①安装qiankun

$ npm install qiankun

②在入口文件main.js 引入qiankun相关方法( start 、 setDefaultMountApp )
③setDefaultMountApp 注册子应用(类似vue路由注册)

import {  start, setDefaultMountApp } from 'qiankun'
//注册子应用(类似vue路由注册)
// 当匹配到activeRule的时候,请求获取entry资源,渲染到container中
registerMicroApps([
  {
    name: "vue2App",         //自定义子应用名称
    entry: "//localhost:3001", //默认会加载这个html,解析里面的js,动态执行(子应用必须支持跨域)
    container: "#out-main",  //挂载到主应用的哪个元素下
    activeRule: "/vue2", //当我劫持到路由地址为/vue2时,我就把http://localhost:3001这个应用挂载到#app-main的元素下
  }
]);

④ 开启 start();

2.子应用:

子应用不需要额外安装qiankun,即可接入主应用

①修改入口文件main.js, 修改并导出qiankun定义的三个钩子函数( bootstrap、mount、unmount )

let instance = null;
function render(props = {}) {
  const { container } = props;
  window.props = props;
  //会把这个应用(也就是这个界面),插入到主应用的container的元素中去
  instance = new Vue({
    router,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector("#app") : "#app"); //这里是挂载到自己的html中,主应用会拿到这个挂载的html,将其插入到主应用中
}

// 独立运行时
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;
}

②修改路由文件, 将路由base值要和activeRule匹配规则保持一致

export const routes = [
  {
    path: "/",
    redirect: "/list",
  },
  {
    path: "/list",
    component: () => import("@/views/protocol/index"),
  },
];

const router = new VueRouter({
  base: "vue2",
  mode: "history",
  routes,
});
export default router;

③ 修改webpack配置,允许开发环境跨域及umd打包

module.exports = {
  lintOnSave: false,
  devServer: {
    port: "3001",
    headers: {
      "Access-Control-Allow-Origin": "*", //所有人都可以访问我的服务器
    },
  },
  configureWebpack: {
    output: {
      // library: `${name}-[name]`,
      library: `vue2App`,
      libraryTarget: "umd", // 把微应用打包成 umd 库格式
      // jsonpFunction: `webpackJsonp_${name}`,
    },
  },
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值