qiankun在vue3 vue2 为主应用 ,vue3+vite为子应用 使用

  https://gitee.com/qiaoyongli/qiankun.git

1.vue2 的主应用 

(1)引入乾坤包   npm install  qiankun -S

(2)main.js代码如下

import Vue from "vue";
import App from "./App.vue";

Vue.config.productionTip = false;

//qiankun配置
import { registerMicroApps, start } from "qiankun";

//子应用列表
let apps = [
  {
    name: "pageone",
    entry: "//localhost:8081", //子应用的地址,这里演示是本地启动的地址。
    container: "#app", //子应用的容器节点的选择器(vue一般为app)
    activeRule: "/home/pageone", //访问子应用的规则,比如:主应用为localhost:8080,那访问该子应用的url应为localhost:8080/home/pageone
  },
];

//注册子应用
registerMicroApps(apps);

//启动
start();

new Vue({
  render: (h) => h(App),
}).$mount("#app");

2.vue3+vite 为   子    应用 

npm install  vite-plugin-qianku@1.0.15   //下载乾坤插件

main.js代码如下

import { createApp } from 'vue'
import '@/assets/style.css'
import App from './App.vue'
import { createWebHistory } from 'vue-router'
import createRouter from "./router"
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'

let router = null
let instance = null
let history = null

function render(props) {
  console.log("__POWERED_BY_QIANKUN__", qiankunWindow.__POWERED_BY_QIANKUN__)
  const container = props ? props.container : undefined
  history = createWebHistory(qiankunWindow.__POWERED_BY_QIANKUN__ ? '/home' : '/ms-home')

  
  router = createRouter(history)
  console.log(router);
  
  instance = createApp(App)
  instance.use(router)
  instance.mount(container ? container.querySelector('#app') : '#app')
}
renderWithQiankun({
  mount(props) {
    render(props)
    instance.config.globalProperties.$onGlobalStateChange = props.onGlobalStateChange
    instance.config.globalProperties.$setGlobalState = props.setGlobalState
  },
  bootstrap() {
    console.log('%c%s', 'color: green;', 'vue3.0 app bootstraped')
  },
  unmount() {
    instance.unmount()
    instance._container.innerHTML = ''
    instance = null
    router = null
    history.destroy()
  },
  update() {
    console.log('update')
  }
})

if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  render(undefined)
}

router.js 代码如下

import { createRouter, createWebHistory, createWebHashHistory } from "vue-router";

import Layout from "@/layout/index.vue";

const routers = [
  {
    path: "/", //根目录路由为/
    component: Layout, //指定使用Layout组件布局
    redirect: "/pageone",
    children: [
      {
        path: "/pageone",
        name: "pageone",
        component: () => import("@/views/pageone.vue"),
      },
      {
        path: "/pageone/pagetwo",
        name: "pagetwo",
        component: () => import("@/views/pagetwo.vue"),
      },
    ],
  },

];


export default function (history) {
  return createRouter({
    history: history,
    routes:routers
  })
}

layout/index.vue 代码如下   可以使用layout布局

<template>
  <el-container class="contanier_box">
    <el-header class="headerClass">
      <Header></Header>
    </el-header>

    <el-container class="lcr">
      <el-main class="mainBox">
        <router-view v-slot="{ Component }">
          <Transition name="fade-right" mode="out-in">
            <component :is="Component"></component>
          </Transition>
        </router-view>
      </el-main>
    </el-container>
  </el-container>
</template>

<script setup>
import Header from "@/components/header.vue";
import { onMounted } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
</script>

<style lang="scss" scoped>
.contanier_box {
  width: 100vw;
  height: 100%;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  overflow: hidden;
  .headerClass {
    width: 100%;
    height: 13%;
  }

  .lcr {
    width: 100%;
    height: 87%;
    .sliberLeft {
      width: 7%;
      height: 100%;
    }
    .mainBox {
      width: 86%;
      height: 100%;
      padding: 0;
      overflow: hidden;
    }
    .sliberRight {
      width: 7%;
      height: 100%;
    }
  }
}

.fade-right-enter-to,
.fade-right-leave-from {
  opacity: 1;
  transform: none;
}
.fade-right-enter-active,
.fade-right-leave-active {
  transition: all 0.5s;
}
.fade-right-enter-from,
.fade-right-leave-to {
  opacity: 0;
  // transform: translateX(-2000px);
}
</style>

子应用首页代码位置

3.上面是vue2 为主应用   vue3+vite 为子应用       接下来是 vue3的主应用代码 mian.js

   "qiankun": "^2.10.16",

    "vue": "^3.2.13"

import { createApp } from "vue";
import App from "./App.vue";

import { registerMicroApps, start, setDefaultMountApp } from "qiankun";

// 在主应用中注册子应用
registerMicroApps([
  {
    name: "vue app",
    entry: "//localhost:8081", // 重点
    container: "#app", // 重点
    activeRule: "/home/pageone", // 重点
    props: {
      appContent: "",
    },
  },
]);
setDefaultMountApp("/home");
// 启动
start();

createApp(App).mount("#app");

目前实现了vue2 为主  或者 vue3 为主      vue3+vite为子的本地运行页面之间的切换 

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用 QiankunVue 3 和 Vite 进行打包的场景,你可以按照以下步骤进行操作: 1. 首先,确保你已经完成了项目的开发,并且在本地可以正常运行。 2. 进入你的项目根目录,并执行以下命令安装 QiankunVite 相关的依赖: ``` npm install qiankun @vue/cli-plugin-vue-next ``` 或者 ``` yarn add qiankun @vue/cli-plugin-vue-next ``` 3. 在你的项目根目录下创建一个名为 `vite.config.js` 的文件,并添加以下内容: ```javascript import { defineConfig } from 'vite'; export default defineConfig({ base: '/your-sub-app-base-path/', }); ``` 将 `/your-sub-app-base-path/` 替换为你的应用的基础路径,如果你的应用是根路径,则直接使用 `/`。 4. 在 `src` 目录下创建一个名为 `main.js` 的文件,并添加以下内容: ```javascript import { createApp } from 'vue'; import App from './App.vue'; let app = null; function render() { app = createApp(App); app.mount('#app'); } if (!window.__POWERED_BY_QIANKUN__) { render(); } export async function bootstrap() { console.log('应用 vue3 vite 启动'); } export async function mount(props) { render(); } export async function unmount() { app.unmount(); app = null; } ``` 5. 在 `package.json` 中添加以下内容: ```json { "name": "your-sub-app-name", "homepage": "/your-sub-app-base-path/", "scripts": { "build": "vue-cli-service build" } } ``` 将 `"your-sub-app-name"` 替换为你的应用名称,`"/your-sub-app-base-path/"` 替换为你的应用的基础路径。 6. 执行以下命令来进行打包: ``` npm run build ``` 或者 ``` yarn build ``` 这将在你的项目根目录下生成一个 `dist` 目录,其中包含了打包后的静态文件。 7. 最后,将生成的 `dist` 目录中的文件部署到你的服务器或者 CDN 上,以供在 Qiankun应用中加载使用。 完成上述步骤后,你的应用就可以通过 Qiankun 进行加载和使用了。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值