vue3+vite+qiankun实现微应用

主应用

1、安装qiankun

npm install qiankun

2、在主应用中创建微应用的入口文件 src\views\micro\index.vue

这个文件主要是用来提供一个 DOM 节点挂载微应用

<template>
  <div class="xin">
    <p>qiankun入口文档</p>
    <div id="qiankun-container"></div>
    <!--xinHome 为放置子项目的盒子  -->
  </div>
</template>

<!-- <script>
import { loadMicroApp, start } from 'qiankun'; //引入手动调用方法

export default {
  name: 'XinVue2',
  data() {
    return {};
  },
  created() {
    this.$nextTick(() => {
      // hash模式下配置
      const getActiveRule = hash => location => location.hash.startsWith(hash);
      this.vueApp = loadMicroApp({
        name: 'qiankun-children',
        entry: '//localhost:8081/',
        container: '#xinHome',
        activeRule: getActiveRule('#/'),
      });
      //启动乾坤函数
      start({ singular: false });
    });
  },
  beforeDestroy() {
    console.log(this.vueApp.unmount({ name: 'qiankun-children' }));
    this.vueApp.unmount({ name: 'qiankun-children' });
  },
  methods: {},
};
</script> -->

3、配置乾坤路由router/index.js

      {
        // 匹配所有其他路由
        path: '/:pathMatch(.*)*',
        name: 'micro',
        component: () => import('@/views/micro/index.vue'),
      },

4、新建qiankun配置页src\micro-apps\index.ts

import { registerMicroApps, start } from 'qiankun';
import NProgress from 'nprogress'
import "nprogress/nprogress.css";
// 加载动画
const setLoadingLoader = (loading: boolean) => {
  if (loading) {
    NProgress.start()
  } else {
    NProgress.done()
  }
}
// 子应用
const microApps = [
  {
    name: 'qiankun-children',
    entry: '//localhost:3001',
    activeRule: '/qiankun-one'
  }
]
// 生命周期处理
const lifeCycles = {
  beforeLoad: (app: any) => {
    console.log("before load app.name====>>>>>", app.name)
    return Promise.resolve(app)
  },
  beforeMount: (app: any) => {
    console.log("before mount app.name====>>>>>", app.name)
    return Promise.resolve(app)
  },
  afterMount: (app: any) => {
    console.log("after mount app.name====>>>>>", app.name)
    return Promise.resolve(app)
  }
}
// 子应用处理
const normalizeMicroApp = (apps = []) => {
  return apps.map((app: any) => ({
    container: '#qiankun-container',
    loader: setLoadingLoader,
    ...app
  }))
}
const register = () => registerMicroApps(normalizeMicroApp(microApps), lifeCycles)
export default {
    register,
    start
}

5、main.js中引入qiankun配置页

import microApps from './micro-apps';
microApps.register();
microApps.start();

6、app.vue中放入微应用的入口文件

<template>
  <router-view />
  <section id="qiankun-container"></section>
</template>
<script>
import { start } from 'qiankun';
export default {
  mounted() {
    if (!window.qiankunStarted) {
      window.qiankunStarted = true;
      start();
    }
  },
};
</script>

<style>
html,
body,
#app {
  width: 100%;
  height: 100%;
}
</style>

7、主应用调用微应用页面路由

http://localhost:2888/qiankun-one/back

在这里插入图片描述

微应用

1、微应用安装vite-plugin-qiankun

npm install vite-plugin-qiankun

1、vite.config.ts配置

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import qiankun from "vite-plugin-qiankun";

export default defineConfig({
  plugins: [
    vue(),
    // 需要在这里注册子应用名称,
    qiankun("qiankun-children", {
      useDevMode: true,
    }),
  ],
  server: {
    port: 3001,
    cors: true, // 需要开启跨域!
  },
});

2、main.ts配置

import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router';
import { renderWithQiankun, qiankunWindow } from "vite-plugin-qiankun/dist/helper"
import App from './App.vue'
import routes from "./router";
let router = null;
let instance: any = null;
let history: any = null;
function render(props = {}) {
    const { container } = props;
    //名字需要和主应用的入口名字对的上
    history = createWebHistory(qiankunWindow.__POWERED_BY_QIANKUN__ ? '/qiankun-one' : '/');
    router = createRouter({
        history,
        routes,
    });
    instance = createApp(App);
    instance.use(router);
    instance.mount(container ? container.querySelector('#app') :document.getElementById("app"));
    if (qiankunWindow.__POWERED_BY_QIANKUN__) {
        console.log('我正在作为子应用运行')
    }
}
renderWithQiankun({
    bootstrap() {
        console.log('sub app one bootstrap')
    },
    mount(props) {
        console.log('sub app one mount')
        render(props);
    },
    update() {
        console.log('sub app one update')
    },
    unmount(props) {
        console.log('sub app one unmount')
        instance.unmount();
        instance._container.innerHTML = '';
        history.destroy();
        router = null;
        instance = null;
    }
});
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
    render();
}

3、页面配置

在这里插入图片描述

3.1 HomeComponent.vue
<template>
  <div>
    我是HomeComponent
    <router-link to="/back">前往BackHome</router-link>
  </div>
</template>
 
<script>
export default {
  name: "HomeComponent",
}
</script>
 
<style scoped>
 
</style>
3.2 BackHome.vue
<template>
  <div>
    我是BackHome
    <router-link to="/">回到HomeComponent</router-link>
    //这个to="/"是router中配置的HomeComponent的地址
  </div>
</template>

<script>
export default {
  name: "BackHome",
};
</script>

<style scoped></style>

4、路由配置 router/index.ts

const routes = [
  {
    path: "/",
    name: "HomeComponent",
    component: () => import("../view/HomeComponent.vue"),
  },
  {
    path: "/back",
    name: "BackHome",
    component: () => import("../view/BackHome.vue"),
  },
];
export default routes;

主应用使用微应用页面路由跳转

http://localhost:2888/qiankun-one/back
### 升级 MySQL 5.7 到 MySQL 8.0 的迁移指南 升级 MySQL 数据库版本是一个复杂的过程,涉及多个步骤以确保数据一致性、兼容性和性能优化。以下是关于从 MySQL 5.7 升级到 MySQL 8.0 迁移过程中需要注意的关键点以及兼容性变更的内容。 #### 兼容性变化概述 MySQL 8.0 引入了许多新功能和改进,但也有一些不向后兼容的变化。这些变化可能会影响现有的数据库配置、查询逻辑或应用程序行为[^2]。因此,在执行升级之前,建议仔细阅读官方文档并进行全面测试。 - **SQL 模式更改**: 默认 SQL 模式的调整可能导致某些语句不再被接受。例如,默认情况下启用了 `ONLY_FULL_GROUP_BY`[^3]。 - **存储引擎更新**: InnoDB 是唯一支持事务的存储引擎,并且 MyISAM 不再推荐用于生产环境中的核心表结构[^4]。 - **密码验证策略增强**: 新增更严格的密码强度校验机制,这可能会阻止旧版客户端连接成功[^5]。 - **字符集默认值改变**: 字符串列现在使用 utf8mb4 编码作为标准设置而不是之前的 latin1 或者简单的 utf8[^6]。 #### 实际操作流程 为了顺利完成从 MySQL 5.7 至 8.0 的过渡,请遵循如下指导原则: 1. 备份现有数据库实例及其所有相关文件夹内容以防万一出现问题可以迅速恢复原始状态[^7]。 ```bash mysqldump --all-databases > all_dbs_backup.sql ``` 2. 安装最新稳定发行版的 MySQL Server 软件包于目标服务器上同时保留当前运行的服务不变直到确认无误为止[^8]。 3. 使用 mysql_upgrade 工具来修复权限表项以及其他必要的元数据对象同步工作以便适应新版特性需求[^9]。 ```sql mysql_upgrade -u root -p; ``` 4. 测试整个应用系统能否正常运转并无明显错误提示后再正式切换至新的数据库服务端口之上[^10]。 ```python import pymysql.cursors connection = pymysql.connect(host=&#39;localhost&#39;, user=&#39;root&#39;, password=&#39;your_password&#39;, cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: sql = "SHOW VARIABLES LIKE &#39;version&#39;;" cursor.execute(sql) result = cursor.fetchone() finally: connection.close() print(result[&#39;Value&#39;]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值