位置: 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(乐吾实验学校网站)

  • xs996799619(xs99)

    xs996799619(xs99)

  • vivox70pro处理器型号(vivox70pro处理器和骁龙888哪个好)

    vivox70pro处理器型号(vivox70pro处理器和骁龙888哪个好)

  • qq群怎么看男女比例(qq群如何查看性别)

    qq群怎么看男女比例(qq群如何查看性别)

  • 苹果13分辨率是2k吗(苹果13分辨率是几k最清楚的)

    苹果13分辨率是2k吗(苹果13分辨率是几k最清楚的)

  • 抖音识别字幕怎么用(抖音识别字幕怎么修改)

    抖音识别字幕怎么用(抖音识别字幕怎么修改)

  • 微信聊天记录能同步吗(微信聊天记录能保存多久)

    微信聊天记录能同步吗(微信聊天记录能保存多久)

  • 手机删除的照片恢复后到哪去找(手机删除的照片会流出去吗)

    手机删除的照片恢复后到哪去找(手机删除的照片会流出去吗)

  • mate30pro通话质量不好(华为mate30pro通话声音不清楚)

    mate30pro通话质量不好(华为mate30pro通话声音不清楚)

  • 腾讯免流为什么还是在使用流量(腾讯免流为什么用不了)

    腾讯免流为什么还是在使用流量(腾讯免流为什么用不了)

  • 电脑图片放大按什么键(电脑图片放大按右键吗)

    电脑图片放大按什么键(电脑图片放大按右键吗)

  • 华为nova7为什么没有智能遥控(华为nova7为什么指纹不能用了)

    华为nova7为什么没有智能遥控(华为nova7为什么指纹不能用了)

  • 虎牙蓝光10m需要多少网速(虎牙蓝光100m要什么电脑配置)

    虎牙蓝光10m需要多少网速(虎牙蓝光100m要什么电脑配置)

  • 硅胶和液态硅胶手机壳有什么区别(硅胶和液态硅胶哪个散热好)

    硅胶和液态硅胶手机壳有什么区别(硅胶和液态硅胶哪个散热好)

  • 电脑r5和r7是什么意思(电脑r5r7有什么区别)

    电脑r5和r7是什么意思(电脑r5r7有什么区别)

  • 拼多多能开发票吗

    拼多多能开发票吗

  • 设置黑名单后别人打电话会怎样(设置黑名单后别人发信会怎样)

    设置黑名单后别人打电话会怎样(设置黑名单后别人发信会怎样)

  • 电子书怎么打印出来(电子书怎么打印成书)

    电子书怎么打印出来(电子书怎么打印成书)

  • 钉钉中途退出直播算时间吗(钉钉中途退出直播怎么办)

    钉钉中途退出直播算时间吗(钉钉中途退出直播怎么办)

  • 微信下载原图失败什么意思(微信下载原图失效怎么办)

    微信下载原图失败什么意思(微信下载原图失效怎么办)

  • ip40防护等级是什么(ip42防护等级是什么)

    ip40防护等级是什么(ip42防护等级是什么)

  • 已激活的iphone能买吗(已激活的苹果手机可以买吗)

    已激活的iphone能买吗(已激活的苹果手机可以买吗)

  • md544zpa是几寸(md543zp/a是什么型号)

    md544zpa是几寸(md543zp/a是什么型号)

  • 电脑速度慢换什么硬件(电脑速度慢换什么配置)

    电脑速度慢换什么硬件(电脑速度慢换什么配置)

  • 淘宝首页变了 怎么变回来(淘宝首页变了怎么改回去)

    淘宝首页变了 怎么变回来(淘宝首页变了怎么改回去)

  • 抖音上地址怎么老是换(抖音上地址怎么改)

    抖音上地址怎么老是换(抖音上地址怎么改)

  • 手机照片上怎么画直线(手机照片上怎么画红圈)

    手机照片上怎么画直线(手机照片上怎么画红圈)

  • 风险管控中心怎么解除(风险管控中心怎么关闭)

    风险管控中心怎么解除(风险管控中心怎么关闭)

  • 小米8se怎么设置铃声声音大小(小米8se怎么设置不熄灭屏幕)

    小米8se怎么设置铃声声音大小(小米8se怎么设置不熄灭屏幕)

  • qq名片模板怎么改(qq名片模板怎么改格式)

    qq名片模板怎么改(qq名片模板怎么改格式)

  • 无法打开网页,因为网络连接被重设怎么办(iphone无法打开网页怎么办)

    无法打开网页,因为网络连接被重设怎么办(iphone无法打开网页怎么办)

  • 生产成本年末转入什么科目
  • 实验用品包括实验仪器吗
  • 广告发布费在哪个分类
  • 旅游服务住宿费入什么科目
  • 招标代理服务费由谁支付
  • 个人劳务报酬所得税率表
  • 法定盈余公积和法定公积金一样吗
  • 买一手房需要交哪些税费
  • 应付职工薪酬如何填列
  • 生产企业有哪些费用
  • 收到供应商违约金 发票
  • 国内公司向境外公司借款
  • 资本公积与实收资本和盈余公积有什么区别?
  • 小微企业增值税申报表怎么填
  • 出售无形资产是收入吗
  • 互联网合同要交社保吗
  • 公允价值变动损益是什么意思
  • 可以自行设计的软件
  • 科技型中小企业认定需要什么条件
  • 工会发放慰问品总金额超过多少需要比价
  • 商品流通企业会计零售业务核算
  • 进口货物有进项税吗
  • 百旺税控服务器管理系统
  • 存货发出记账成本最高
  • 房屋维修费属于固定资产吗
  • ibm笔记本进bios
  • 增值税当月申报次月缴纳吗
  • 实收资本是认缴出资吗
  • PHP:mcrypt_enc_is_block_mode()的用法_Mcrypt函数
  • 补缴税款怎么补
  • json格式字符串提取值
  • php获取访问用户的ip
  • laravel常用命令
  • 福利费需要缴税吗
  • 发放职工薪酬的账务处理
  • 未确认融资费用报表填在哪个科目
  • 收到车险发票含增值税吗
  • 怎么安装离线导航
  • cat 开源
  • 深度强化学习-DQN算法原理与代码
  • yolo训练教程
  • jquery+thinkphp实现跨域抓取数据的方法
  • 交易性金融资产属于流动资产
  • 对公账户的资金怎么转出
  • 代发工资范围
  • 低值易耗品在年报上怎么看的
  • 自然人代开经营所得汇算清缴怎么做
  • 业务招待费进项票可以抵扣吗
  • ipv6的设置
  • 应交税费应交增值税销项税额
  • 减免的企业所得税是否需要征税 税屋
  • 售后服务维修收费制度
  • 工业企业新产品收入的调研报告
  • 用货物抵债如何入账
  • 机动车临时号牌怎么贴
  • 增值税开票系统怎么改开票人名字信息
  • 长期股权投资成本法会计处理
  • 差旅费的进项税率是多少
  • 资产负债表和利润表的利润不一致
  • 报销单扣除金额什么意思
  • 资产状况信息公示还是不公示
  • sql server的使用方法
  • 如何设计高效合理的未来课程
  • debian sid 安装
  • win7系统每次关机都安装更新
  • [置顶] 关于UNITY5.0和高通AR4.2.3在手机上白屏的问题
  • react service worker
  • jquery 使用
  • Bullet(Cocos2dx)之内存泄露检测
  • js setTimeout opener的用法示例详解
  • jquery弹出div窗口
  • 利用感情骗取钱财算诈骗吗
  • unity总结
  • python jsondecodeerror异常捕获
  • 深入浅析是什么意思
  • jQuery中text() val()和html()的区别实例详解
  • 电子税务局待确认授权不能勾选
  • 经营租赁属于什么费用
  • 可以抵扣的消费税有哪些
  • 银行服务创新金点子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设