vue3+vite项目中使用qiankun的方式

需要安装的依赖:
 
"vite-plugin-qiankun": "1.0.10",
"vue-tsc": "^0.40.7"
"vite": "3.0.9",
"@vitejs/plugin-vue": "^1.6.0",
"vue": "^3.2.37",
"vue-router": "^4.1.3",
 
vue项目入口文件main.ts :
 
import { createApp } from 'vue'
import App from './App.vue'
import routes from './router/routes'
import store from './store/index'
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'
import { createRouter, createWebHistory } from 'vue-router'
 
let router: any = null
let app: any = null
let history: any = null
function render(props?) {
  let container
  if (props) {
    container = props.container
    props.onGlobalStateChange((state, preState) => {
      if (state.globalToken) {
        store.commit('setToken', state.globalToken)
        localStorage.setItem('token', state.globalToken)
      }
    }, true)
  }
  history = createWebHistory(qiankunWindow.__POWERED_BY_QIANKUN__ ? '/appSub' : '/')
  router = createRouter({
    history,
    routes,
  })
 
  app = createApp(App)
  app.use(store)
  app.use(router)
  app.mount(container ? container.querySelector('#app') : document.getElementById('app'))
}
 
renderWithQiankun({
  bootstrap() {},
  mount(props) {
    render(props)
  },
  unmount() {
    app.unmount()
    app._container.innerHTML = ''
    history.destroy() // 不卸载  router 会导致其他应用路由失败
    router = null
    app = null
  },
})
 
// 独立运行时
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  render()
}
 
 
 vite.config.ts:
 
import { defineConfig, loadEnv } from 'vite' // defineConfig 工具函数 获取类型提示
import qiankun from 'vite-plugin-qiankun'
import { resolve } from 'path'
// useDevMode 开启时与热更新插件冲突
const useDevMode = true // 如果是在主应用中加载子应用vite,必须打开这个,否则vite加载不成功, 单独运行没影响
// @ts-ignore
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd())
  let config = {
    plugins: [
      qiankun('appSub1', { useDevMode }),
    ],
  }
  return config
})
 
 
posted @ 2023-01-30 17:18  菌子乐水  阅读(934)  评论(0编辑  收藏  举报