乾坤qiankun框架 使用

654 阅读1分钟

主应用 vue2项目搭建

第一步、创建vue2的项目与正常创建无异,在这里不做过多描述;

第二部、将创建好的vue2项目作为主应用,在根目录先安装qiankung

yarn add qiankun # 或者 npm i qiankun -S

第三步、修改src目录下面的main.js

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

Vue.config.productionTip = false

import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
  {
    name: 'vue2',
    entry: '//localhost:7000', // 运行微应用的地址
    container: '#container', // 展示的DOM容器 id
    activeRule: '/app-vue2', // 跳转路径
  },
  {
    name: 'vue3',
    entry: '//localhost:7001',
    container: '#container',
    activeRule: '/app-vue3',
  },
]);
// 启动 qiankun
start();

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

第四步、在src目录下面的App.vue,提供微应用展示的DOM

<template>
  <div id="app">
    <nav>
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link> |
      <!--需要与main.js配置的跳转路由一致-->
      <router-link to="/app-vue2">app-vue2</router-link> |
      <router-link to="/app-vue3">app-vue3</router-link>
    </nav>
    <router-view/>
    <!--微应用在此展示-->
	<div id="container"></div>
  </div>
</template>

到此为止主应用配置完成

然后开始搭建微应用,在主应用与src同级创建一个examples文件夹用来存放微应用 如图所示

微应用都放在这个文件下

在新创建的vue项目的src文件中创建名为public-path.js 的js文件,如图所示:

在这里插入图片描述

public-path.js文件代码如下:

if (window.__POWERED_BY_QIANKUN__) {
 // eslint-disable-next-line  no-undef
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

入口文件 main.js 文件代码修改如下:

import './public-path';
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router';
import routes from './router'
import store from './store'

Vue.config.productionTip = false

let router = null;
let instance = null;
function render(props = {}) {
  const { container } = props;
  router = new VueRouter({
    base: window.__POWERED_BY_QIANKUN__ ? '/app-vue2' : '/',
    mode: 'history',
    routes: routes.options.routes,
  });

  instance = new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
}
// 独立运行时
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;
  router = null;
}

打包配置文件(vue.config.js)代码修改成:

const { name } = require('./package');
module.exports = {
  devServer: {
    port: 7000, // 启动项目时的端口号
    headers: {
      'Access-Control-Allow-Origin': '*',
    },
  },
  configureWebpack: {
    output: {
      library: `${name}-[name]`,
      libraryTarget: 'umd', // 把微应用打包成 umd 库格式
      chunkLoadingGlobal: `webpackJsonp_${name}`,
    },
  },
};

原文链接:blog.csdn.net/qq\_5894683…