首页 > 其他分享 >vue3 + qiankun(微前端)

vue3 + qiankun(微前端)

时间:2022-10-14 15:35:01浏览次数:70  
标签:const 前端 props qiankun instance jupiter vue3 import

主服务

路由配置

const router = createRouter({
  history: createWebHistory(),
  routes:[
  {
     path: `/jupiter:page*`,
     name: `jupiter`,
     component: () => import('@/views/child-app/jupiter/index.vue'),
     meta: { title: '子服务', childApp: true },
  },
   // ...
  ]
})
export default router

path: /jupiter:page*,意为当url为/jupiter就会激发子服务的组件,剩下的事情就在此组件中完成

组件(@/views/child-app/jupiter/index.vue)

<template>
  <div ref="childAppRef" class="sub-app-container" />
</template>

<script setup lang="ts">
import { loadMicroApp } from 'qiankun'
import options from '@/microApp/options/index'

const nameKey = 'jupiter'
const childAppRef = ref()
onMounted(() => {
  const { url, appName } = options[nameKey]
  loadMicroApp({
    name: appName,
    entry: `${url}/${appName}`,
    container: childAppRef.value,
  })
})
</script>
<style scoped lang="scss"></style>  

子服务

main.js

因为qiankun还未出官方的方法,这里需要借助第三方插件vite-plugin-qiankun此样例版本为"^1.0.15"

import {
  qiankunWindow, // 这个变量可以判断出是否在主服务中运行
  renderWithQiankun,
} from 'vite-plugin-qiankun/dist/helper'

function render(props?: any) {
  const elementName = 'venus-fara'
  const instance = createApp(App)
  instance.use(router)
  // instance.use(...)
  instance.mount(
    (props?.container
      ? props.container.querySelector(`#${elementName}`)
      : document.getElementById(elementName)) as Element
  )
  return instance
}


if (!qiankunWindow.__POWERED_BY_QIANKUN__) { // 独立运行
  render()
} else { // 在主服务中运行
  renderWithQiankun({
    mount(props) {
      console.log('venusAPP--mount')
      render(props)
    },
    bootstrap() {
      console.log('venusAPP--bootstrap')
    },
    update() {
      console.log('venusAPP--update')
    },
    unmount() {
      console.log('venusAPP--unmount')
      // instance?.unmount()
    },
  })
}

路由配置

const router = createRouter({
  history: createWebHashHistory(),
  routes:[{}...],
})
export default router

routes正常的配置就可以了

vite配置

import qiankun from 'vite-plugin-qiankun'
export default ({ mode }: any) => {
  const env = loadEnv(mode, process.cwd())
  return defineConfig({
    base: `${env.VITE_BASE_CHILD_URL}${env.VITE_BASE_BUILD_DIR}/`, // TODO: 这行也重要,这样此项目静态资源就不会加载出问题了
    qiankun('venus', {
    	useDevMode: true,
    }),
    // ...
  })

标签:const,前端,props,qiankun,instance,jupiter,vue3,import
From: https://www.cnblogs.com/wingring/p/16791518.html

相关文章

  • vite vue3 规范化与Git Hooks
    在《JS模块化》系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的“四个现代化”:工程化、模块化、规范化、流程化。在该系列文章中已详细介绍了模块化的发......
  • 前端学习网址推荐
    HTMLW3CSchool:​​https://www.w3school.com.cn/html/index.asp​​CSSCSSTricks:​​https://css-tricks.com/​​​张鑫旭博客:​​https://www.zhangxinxu.com/wordpres......
  • uniapp-vue3-ts实现 微信小程序-视频上下滑动
    公司需求,后端被迫学习...临时记录一下后续完善暂时不会组件式开发,只能采用选项式了<template><viewstyle="color:white;"><viewclass="swiper">......
  • 前端成神之路-JavaScript高级第04天
    JavaScript高级第04天1.正则表达式概述1.1什么是正则表达式正则表达式(RegularExpression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。正则表......
  • 前端成神之路-vue前端工程化
    1.模块化的分类A.浏览器端的模块化1).AMD(AsynchronousModuleDefinition,异步模块定义)代表产品为:Require.js2).CMD(CommonModuleDefinition,通用模块定义)......
  • 前端成神之路-移动web开发之响应式布局
    我的博客即将同步至OSCHINA社区,这是我的OSCHINAID:海仔技术驿站移动端WEB开发之响应式布局1.0响应式开发原理1.1响应式开发原理就是使用媒体查询针对不同宽度的设备进......
  • Vue3+Element-plus 报错记录
    目录Vue3+Element-plus报错记录报错信息错误场景还原问题排查错误代码el-select多选Vue3+Element-plus报错记录报错信息TypeError:Cannotreadpropertiesofnull......
  • 前端成神之路-CSS初识
    第01阶段.前端基础.CSS初识CSS层叠样式表学习目标理解css的目的作用css的三种引入方式应用css三种引用方式的书写通过样式规则给标签添加简单的样式1.HTML的局限性说起HTML,......
  • 前端成神之路-JavaScript基础第02天笔记
    JavaScript基础第02天1-运算符(操作符)1.1运算符的分类运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。JavaScript中常用的运算符有:算数运......
  • 前端成神之路-JavaScript基础第04天笔记
    JavaScript基础第04天笔记1-数组1.1数组的概念数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。数组是指一组数据的集合,其中的每个数据被称作元素,在数组中......