main.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import './assets/main.css'
  5. import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'
  6. import { restoreOriginalTitle } from '@/composables/useSyncDocumentTitle'
  7. let instance = null
  8. function render(props = {}) {
  9. const { container } = props
  10. instance = createApp(App)
  11. // 通过 props 接收主应用下发的内容(如设备端、token 等)
  12. instance.provide('microProps', props)
  13. instance.use(router)
  14. instance.mount(container ? container.querySelector('#app') : document.getElementById('app'))
  15. }
  16. // qiankun 生命周期
  17. renderWithQiankun({
  18. bootstrap() {
  19. console.log('[web-app] bootstrap')
  20. },
  21. mount(props) {
  22. console.log('[web-app] mount', props)
  23. render(props)
  24. },
  25. update(props) {
  26. console.log('[web-app] update', props)
  27. },
  28. unmount() {
  29. console.log('[web-app] unmount')
  30. // 卸载前还原宿主页面 title,避免浏览器 tab 残留子应用标题
  31. restoreOriginalTitle()
  32. instance?.unmount()
  33. instance = null
  34. },
  35. })
  36. // 独立运行时直接渲染(便于单独调试该子应用)
  37. if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  38. render()
  39. }