vue3+qiankun项目搭建

在这里插入图片描述

https://qiankun.umijs.org/zh

在这里插入图片描述
官网上对vue3并没有搭建的支持。以下分几步解决这个问题。

vue3项目搭建

需依次搭建两个项目,分别作为主应用和子应用。(main-qiankun、other-qiankun)
vue create
在这里插入图片描述
选择默认Vue3模板即可。

qiankun及依赖项引入

npm install qiankun -S   
npm install vuex@4
npm install vue-router

主应用配置

路由配置
import { createRouter, createWebHistory } from "vue-router";

const home = () => import("../home")
const login = () => import("../login")

const routes = [
  { path: "/", redirect: "/home" },
  {
    path: "/home",
    name: "home",
    component: home
  },
  {
    path: "/login",
    name: "login",
    component: login
  }
]

export const router = createRouter({
  history: createWebHistory(),//createWebHashHistroy()路由路径带#
  routes: routes
})

export default router
qiankun配置
  • main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'

import { registerMicroApps, start } from "qiankun";
const app = createApp(App)
app.use(router).mount('#app')

// 在主应用中注册子应用
registerMicroApps([
  {
    name: "child", //子应用名称
    entry: "//localhost:30000", //子应用启动的地址
    container: "#vue3-demo", // 子应用在主应用的容器名称-对应app.vue中
    activeRule: "/child", // 路由地址-路由跳转到该地址则采用qiankun匹配
    props: {
      data: "child子应用",
    }, //传参
  },
]);
// 启动
start();
跨域配置
  • vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 30001, //主应用启动端口号,视情况而定
    headers: {
      "Access-Control-Allow-Origin": "*", // 允许跨域访问子应用页面
    },
  },
})

子应用配置

路由配置
import {
  createRouter,
  createWebHistory
} from 'vue-router'
import '../public-path' // 引入public-path文件
const router = createRouter({
  base: window.__POWERED_BY_QIANKUN__ ? '/vue' : '/', // qiankun进入子应用时,返回true
  history: createWebHistory(), // 不带#
  routes: [{
    path: '/',
    redirect: '/child'
  },
  {
    path: '/child',
    component: () => import('@/components/child')    //绑定一个child组件
  }
  ]
})
export default router
qiankun配置
  • src路径下添加public-path.js
// eslint-disable-next-line no-undef
if (window.__POWERED_BY_QIANKUN__) {
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
  • main.js抛出生命周期钩子
import './public-path'; // 注意需要引入public-path
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store';
let instance = null;

function render({ container } = {}) {
  instance = createApp(App);
  instance.use(router);
  instance.use(store);
  instance.mount(container ? container.querySelector('#app') : '#app');//app.vue有对应的div
}


// 如何独立运行微应用?
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}

export async function bootstrap(props) {
  // 启动
}
export async function mount(props) {
  // 挂载
  render(props);
}
export async function unmount(props) {
  // 卸载
  instance.unmount();
  instance = null;
}
跨域配置

vue.config.js

const { name } = require("./package.json");
const { defineConfig } = require("@vue/cli-service");

module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 30000, // 指定端口  与主应用一致
    headers: {
      "Access-Control-Allow-Origin": "*", // 配置跨域
      "Access-Control-Allow-Headers": "*",
      "Access-Control-Allow-Credentials": "true",
      "Access-Control-Allow-Methods": "*",
      "Cache-Control": "no-cache",
    },
    client: {
      overlay: {
        errors: true,
        warnings: false,
      }
    },
  },
  configureWebpack: {
    output: {
      library: `${name}-[name]`,
      libraryTarget: "umd",
      chunkLoadingGlobal: `webpackJsonp_${name}`,
    }
  },
});

整体效果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoo前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值