位置: IT常识 - 正文

微前端-qiankun(微前端Qiankun 子应用css后加载问题)

编辑:rootadmin
微前端-qiankun 概念使用框架:qiankun介绍:

推荐整理分享微前端-qiankun(微前端Qiankun 子应用css后加载问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微前端Qiankun优缺点,微前端Qiankun 子应用css后加载导致页面闪动,微前端qiankun子应用通信,微前端qiankun子应用通信,微前端Qiankun介绍,微前端Qiankun 子应用css后加载导致页面闪动,微前端Qiankun 子应用css后加载导致页面闪动,微前端Qiankun,内容如对您有帮助,希望把文章链接给更多的朋友!

qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun官网:Go 当使用 iframe 整合系统时,假设我们有系统 A, 当我们想把系统 B 引入 A 系统时,只需要 B 系统提供一个 url 给 A 系统引用即可,这里我们把 A 系统叫做父应用,把 B 系统叫做子应用。同样的,微前端也延续了这个概念,微前端在使用起来基本和使用 iframe 一样平滑。

结构:

分为:主应用(父),微应用(子) 图1:

使用案例:目标:

点击one按钮,切换到one微应用 点击two按钮,切换到two微应用 并且每个微应用都可以跳转自己的路由

步骤:

创建主应用项目创建微应用项目将微应用挂到主应用项目中1. 在主应用中安装qiankun框架$ yarn add qiankun # 或者 npm i qiankun -S2. 在 主应用 中注册微应用

main.js:

import { createApp } from 'vue'import App from './App.vue'import router from './router/index'import ElementPlus from 'element-plus'import 'element-plus/dist/index.css'import { registerMicroApps, start } from 'qiankun';registerMicroApps([ { name: "vueChildOne", props: { age: 10 }, //给子应用传数据 entry: "//localhost:3001", //默认会加载这个html,解析里面的js,动态执行(子应用必须支持跨域)里面,是用fetch去请求的数据 container: "#child-one-content", //挂载到主应用的哪个元素下 activeRule: "/child-one", //当我劫持到路由地址为//child-one时,我就把http://localhost:3001这个应用挂载到#child-one-content的元素下 }, { name: 'vueChildTwo', entry: '//localhost:3002', // entry: { scripts: ['//http://192.168.2.120:3001/main.js'] }, container: '#child-two-content', activeRule: '/child-two', },]);// start(); // 启动qiankun,这里不在一开始的时候使用createApp(App).use(ElementPlus).use(router).mount('#app-base')

App.vue

<template> <div> <div class="bens"> <el-button type="primary" @click="$router.push('/child-one')">childOne</el-button> <el-button type="primary" @click="$router.push('/child-two')">childTwo</el-button> </div> <router-view></router-view> </div></template><script>export default { name: "App", components: {},};</script><style>.bens { width: 100%; display: flex; justify-content: center; position: absolute; top: 15px; left: 0; z-index: 9999999;}#app-base { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}</style>微前端-qiankun(微前端Qiankun 子应用css后加载问题)

index.html:

// 将id:app 改为 app-base 自定义就行,只要与main.js对应起来,切不与微应用重复<div id="app-base"></div>

router.js

import { createRouter, createWebHistory } from "vue-router";// 2. 配置路由const routes = [ { path: '/child-one', component: () => import('@/views/childOne/index.vue'), }, { path: '/child-two', component: () => import('@/views/childTwo/index.vue'), },];// 1.返回一个 router 实列,为函数,里面有配置项(对象) historyconst router = createRouter({ history: createWebHistory(), routes,});// 3导出路由 然后去 main.ts 注册 router.tsexport default router

childOne/index.vue

<template> <h2>我是 主应用 one</h2> <div id="child-one-content"></div></template><script>import { start } from "qiankun";export default { name: "childOne", components: {}, mounted() { // 启动微应用 if (!window.qiankunStarted) { window.qiankunStarted = true; start(); } },};</script><style></style>

childTwo/index.vue

<template> <h2>我是 主应用 two</h2> <div id="child-two-content"></div></template><script>import { start } from "qiankun";export default { name: "childTwo", components: {}, mounted() { // 启动微应用 if (!window.qiankunStarted) { window.qiankunStarted = true; start(); } },};</script><style></style>4. 微应用配置child-one

src下创建public-path.js

if (window.__POWERED_BY_QIANKUN__) { __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__}

main.js

import { createApp } from 'vue'import App from './App.vue'import router from './router/index'import './public-path' // 引入public-path.js// createApp(App).mount('#app')let instance = null;function render(props = {}) { if (instance) return; const { container } = props; console.log(container); instance = createApp(App) .use(router) .mount(container ? container.querySelector("#app-child-one") : "#app-child-one");}// 独立运行时if (!window.__POWERED_BY_QIANKUN__) { render();}export async function bootstrap() { console.log("[vue] vue app bootstraped");}export async function mount(props) { console.log("[vue] props from main framework", props); render(props);}export async function unmount() { //可选链操作符 instance.$destroy?.(); instance = null;}

index.html

<!DOCTYPE html><html lang=""> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title><%= htmlWebpackPlugin.options.title %></title> </head> <body> <noscript> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app-child-one"></div> <!-- built files will be auto injected --> </body></html>

vue.config.js

module.exports = { lintOnSave: false, devServer: { port: "3001", headers: { "Access-Control-Allow-Origin": "*", //所有人都可以访问我的服务器 }, }, configureWebpack: { output: { // library: `${name}-[name]`, library: `vueChildOne`, libraryTarget: "umd", // 把微应用打包成 umd 库格式 // jsonpFunction: `webpackJsonp_${name}`, }, },};

router.js

import { createRouter, createWebHashHistory, createWebHistory } from "vue-router";// 2. 配置路由const routes = [ { path: '/', component: () => import('@/views/home/index.vue'), }, { path: '/about', component: () => import('@/views/about/index.vue'), },];// 1.返回一个 router 实列,为函数,里面有配置项(对象) historyconst router = createRouter({ history: createWebHashHistory('/child-one'), routes,});// 3导出路由 然后去 main.ts 注册 router.tsexport default router5. 微应用配置child-two

与child-two同理,只要把对应的" child-one " 换成" child-two "即可

demo代码地址

码云地址

本文链接地址:https://www.jiuchutong.com/zhishi/292318.html 转载请保留说明!

上一篇:在葡萄牙海岸游泳的抹香鲸妈妈和患白化病的抹香鲸宝宝 (© Flip Nicklin/Minden Pictures)(葡萄牙海岸风光)

下一篇:基于乐吾乐核心库开发的组态编辑器-前端vue2+element,后端node+koa2+mysql5.7(乐吾实验学校网站)

  • 怎样清除系通应用里的垃圾(怎样清除系统垃圾)(如何清除系统应用)

    怎样清除系通应用里的垃圾(怎样清除系统垃圾)(如何清除系统应用)

  • 红米note11pro+是什么处理器

    红米note11pro+是什么处理器

  • 支付宝转账记录删除了还能查到吗(支付宝转账记录怎么删除干净)

    支付宝转账记录删除了还能查到吗(支付宝转账记录怎么删除干净)

  • 荣耀x10如何双击亮屏(荣耀x10如何双击截屏)

    荣耀x10如何双击亮屏(荣耀x10如何双击截屏)

  • 华为nova5pro手机怎么放卡(华为nova5pro手机卡槽在哪里)

    华为nova5pro手机怎么放卡(华为nova5pro手机卡槽在哪里)

  • 抖音的背景虚化在哪里(抖音的背景虚化怎么弄)

    抖音的背景虚化在哪里(抖音的背景虚化怎么弄)

  • 电话手表可以用自己的手机卡吗(电话手表可以用充电宝充电吗?)

    电话手表可以用自己的手机卡吗(电话手表可以用充电宝充电吗?)

  • 电脑上的鼠标为什么不能用(电脑上的鼠标为什么不管用了)

    电脑上的鼠标为什么不能用(电脑上的鼠标为什么不管用了)

  • 爱奇艺账户能够同时几个手机使用(爱奇艺号码登录能用几个人啊)

    爱奇艺账户能够同时几个手机使用(爱奇艺号码登录能用几个人啊)

  • 苹果11没电了充电一直开不了机(苹果11没电了充电会自动开机吗)

    苹果11没电了充电一直开不了机(苹果11没电了充电会自动开机吗)

  • 虚拟号跟正常号的区别(虚拟号跟正常号哪个好)

    虚拟号跟正常号的区别(虚拟号跟正常号哪个好)

  • 手机一直不关机对手机有影响吗(手机一直不关机会不会有影响)

    手机一直不关机对手机有影响吗(手机一直不关机会不会有影响)

  • 小米6x支持快充3.0吗(小米6x快充是多少v多少a)

    小米6x支持快充3.0吗(小米6x快充是多少v多少a)

  • 手机如何压缩文件发送(手机如何压缩文件为rar格式)

    手机如何压缩文件发送(手机如何压缩文件为rar格式)

  • 淘宝怎么改性别(淘宝上的性别怎么改)

    淘宝怎么改性别(淘宝上的性别怎么改)

  • 华为nova5pro有耳机插孔吗(华为nove5pro耳机)

    华为nova5pro有耳机插孔吗(华为nove5pro耳机)

  • 抖音怎么自己做原声(抖音怎么自己做链接挂小黄车)

    抖音怎么自己做原声(抖音怎么自己做链接挂小黄车)

  • 计算器没有mr怎么办(计算器如果没有mc和mr键)

    计算器没有mr怎么办(计算器如果没有mc和mr键)

  • 群解散和移出群聊区别(群解散和移出群聊区别显示1)

    群解散和移出群聊区别(群解散和移出群聊区别显示1)

  • 电脑word文档在哪打开(电脑word文档在哪里创建)

    电脑word文档在哪打开(电脑word文档在哪里创建)

  • 怎么取消点赞(怎么取消点赞过的视频号)

    怎么取消点赞(怎么取消点赞过的视频号)

  • 全民k歌怎么关掉耳返(全民k歌怎么关闭自动续费会员)

    全民k歌怎么关掉耳返(全民k歌怎么关闭自动续费会员)

  • vivo手机微信声音怎么设置(vivo手机微信声音小)

    vivo手机微信声音怎么设置(vivo手机微信声音小)

  • 手机照片添加时间水印(手机照片添加时间水印软件)

    手机照片添加时间水印(手机照片添加时间水印软件)

  • python带你成功复刻热门手机游戏——飞翔的小鸟(python的复制命令)

    python带你成功复刻热门手机游戏——飞翔的小鸟(python的复制命令)

  • 操作系统启动流程和BIOS介绍(操作系统启动流程)

    操作系统启动流程和BIOS介绍(操作系统启动流程)

  • 小规模免增值税是普票还是专票
  • 原材料报废可以退税吗
  • 服务费可以计入办公费吗
  • 简易征收适用哪条法律
  • 对方开具红字发票信息表后我们怎么开负数
  • 会务费税前扣除材料
  • 固定资产残值怎么处理什么时候处理
  • 房地产公司转让土地
  • 公司注销银行公户怎么注销
  • 银行漏记账会造成什么后果
  • 主营业务收入冲销
  • 收到政府划拨的固定资产会计处理
  • 凭证单据的整理
  • 预提职工福利怎么记账
  • 公司购买电脑费用怎么报销
  • 企业所得税一般是多少
  • 目前建筑里面税金总共包括几部分
  • 中国工商银行社保查询
  • 企业发放工资时,可能涉及的会计科目有
  • 活动策划费可以开专票吗
  • 服务费发生退回怎么处理
  • 核定征收的个税怎么算
  • 运输公司租赁车辆怎么做账
  • WIN7系统的镜像文件在哪里
  • 新笔记本怎么激活windows11
  • 结转出租包装物报废的残料价值计入
  • acer笔记本如何关闭键盘数字键
  • 科技三项费用拨款共计5000万元
  • composer安装不知道这样的主机
  • 基于opencv的图像处理
  • php mysql_list_dbs()函数用法示例
  • php图片生成视频
  • 数组 php
  • 成本核算流程及注意事项
  • vue基础知识
  • vue+element-ui项目
  • thinkphp框架结构
  • 勘察设计费是否含税
  • 稿费演出费等劳务收入算工资吗
  • 退预收款需要对方同意吗
  • python爬虫详细教程
  • 织梦文章标题显示不全
  • 出租设备收入交什么税
  • 税率的确定和什么因素有关
  • 用房子贷款印花税怎么算
  • 企业如何代员工做个税汇算清缴
  • 赠送代金券账务怎么处理
  • 应交税金在贷方是什么意思
  • 申请专利的费用怎么入账
  • 银行卡定期存款怎么取出来
  • 风险纳税人去税务局去报税可以吗
  • 设备升级是什么意思
  • 收到代理服务费怎么做分录呢
  • 航天金税盘维护费发票在哪打印
  • 期间费用明细表在哪里找
  • 新注册的公司怎么申报个税
  • mysql中删除表中的数据
  • windows tasks文件夹
  • xp怎么安装iis
  • linux中的挂载命令
  • 怎么取消桌面右下角图标隐藏
  • macos 网速慢
  • windows7手动更新
  • win8 metro启动界面
  • wps linux版本是什么意思
  • android 音频焦点丢失 媒体按键
  • unity3ds
  • jQuery插件安装教程
  • linux中mysql备份shell脚本代码
  • unity制作的2d游戏
  • nodejs示例
  • 红杏是什么意思什么样的
  • 利用ctypes提高Python的执行速度
  • jq获取复选框选中的值
  • 为何会税控盘时钟异常
  • 小规模纳税人的开票
  • 有发票代码和发票号码能下载到电子发票吗
  • 增值税专用发票增额需要什么资料
  • 出口退税额与出口退税收入
  • 税务津贴提高1100
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设