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

  • 销售停滞不前?六个方法改善(销售停滞不前,申请停止销售报告怎么写)

    销售停滞不前?六个方法改善(销售停滞不前,申请停止销售报告怎么写)

  • vivoy52s有没有nfc功能(vivoy52s隐私空间)

    vivoy52s有没有nfc功能(vivoy52s隐私空间)

  • 厘米秀人物怎么弄出来(厘米秀人物怎么开启)

    厘米秀人物怎么弄出来(厘米秀人物怎么开启)

  • iphone摄影怎么没了(苹果手机摄影没有了)

    iphone摄影怎么没了(苹果手机摄影没有了)

  • 手机指纹解锁功能在设置不见了(手机指纹解锁功能删除了怎么恢复)

    手机指纹解锁功能在设置不见了(手机指纹解锁功能删除了怎么恢复)

  • 芒果tv移动月卡是什么(芒果tv移动月卡怎么取消)

    芒果tv移动月卡是什么(芒果tv移动月卡怎么取消)

  • 钉钉撤回的消息对方还能看到吗(钉钉撤回的消息怎么查看)

    钉钉撤回的消息对方还能看到吗(钉钉撤回的消息怎么查看)

  • 惠普136nw和132nw区别(惠普136nw和132nw对比哪款好)

    惠普136nw和132nw区别(惠普136nw和132nw对比哪款好)

  • 有没有电脑版快手(有没有电脑版快手极速版)

    有没有电脑版快手(有没有电脑版快手极速版)

  • 打印机显示e2什么意思(打印机上显示e2)

    打印机显示e2什么意思(打印机上显示e2)

  • 魅族pro6电池休眠怎么激活(魅族pro6s换电池多少钱)

    魅族pro6电池休眠怎么激活(魅族pro6s换电池多少钱)

  • 微信突然不能用了怎么回事(微信突然不能用了怎么办)

    微信突然不能用了怎么回事(微信突然不能用了怎么办)

  • iphonex无线充电多少w(iphonex无线充电怎么设置)

    iphonex无线充电多少w(iphonex无线充电怎么设置)

  • ipad电池一般用几年(ipad电池一般可以用多久)

    ipad电池一般用几年(ipad电池一般可以用多久)

  • 手机上出现hd收费吗(手机上出现hd收费怎么办)

    手机上出现hd收费吗(手机上出现hd收费怎么办)

  • 苹果x的屏幕分辨率几k(苹果x的屏幕分辨率是多少1080p还是2k)

    苹果x的屏幕分辨率几k(苹果x的屏幕分辨率是多少1080p还是2k)

  • 趣头条永久注销还能恢复吗(趣头条永久注销怎么再次注册)

    趣头条永久注销还能恢复吗(趣头条永久注销怎么再次注册)

  • soul mate点亮要多久(soulmate点亮要多少心)

    soul mate点亮要多久(soulmate点亮要多少心)

  • vivox27和vivo x27pro的区别(vivox27和vivox27pro外壳一样吗)

    vivox27和vivo x27pro的区别(vivox27和vivox27pro外壳一样吗)

  • 苹果11怎么显示网速(苹果11怎么显示电量百分比)

    苹果11怎么显示网速(苹果11怎么显示电量百分比)

  • 佳能g2800怎样取墨盒(佳能g2800如何关机)

    佳能g2800怎样取墨盒(佳能g2800如何关机)

  • 贵阳公车如何微信支付(贵阳公交车怎么微信支付)

    贵阳公车如何微信支付(贵阳公交车怎么微信支付)

  • 微信运动点赞别人能看见吗(微信运动点赞别人第二天能看见吗)

    微信运动点赞别人能看见吗(微信运动点赞别人第二天能看见吗)

  • 微星主板显卡插哪个槽(微星主板显卡插槽)

    微星主板显卡插哪个槽(微星主板显卡插槽)

  • 苹果11pro与max区别(苹果11pro和max有什么不一样)

    苹果11pro与max区别(苹果11pro和max有什么不一样)

  • rpa是什么(rpa是什么的缩写)

    rpa是什么(rpa是什么的缩写)

  • 华为p30支付保护中心在哪(华为手机支付保护)

    华为p30支付保护中心在哪(华为手机支付保护)

  • 光模块作用(光模块的作用和装在什么地方)

    光模块作用(光模块的作用和装在什么地方)

  • linux系统中怎么实现文本界面转化为图形界面?(linux系统中怎么创建目录)

    linux系统中怎么实现文本界面转化为图形界面?(linux系统中怎么创建目录)

  • 固定资产清理过程涉及的报表
  • 其他债权投资是资产还是负债
  • 印花税的填报方法
  • 补提上一年度的年终奖
  • 个人挂靠利润如何提取
  • 税控盘维护费要交吗
  • 微信转账手续费怎么算
  • 预收账款多了好还是少了好
  • 发票限额是含税还是不含
  • 什么税不计入税金及附加科目
  • 七月一号出台的什么政策
  • 建筑分包项目有哪些内容
  • 小规模纳税人申报纳税详细流程
  • 知识产权投资入股要交税吗
  • 单位报销的发票
  • 发票专用章盖错地方了可以用吗
  • 补偿金满一年不满一年半
  • 公司帮员工缴纳个税,不从工资里扣,如何做账
  • 关于房屋租赁备案的通知
  • u盘加载缓慢
  • 人力资源管理师考试时间
  • 财管如何区分金额大小
  • 资产负债表其他流动资产计算公式
  • 单位租房的房租怎么入账
  • windows11怎么查询激活时间
  • php string
  • 利息股息红利个人所得税税率
  • 购入研发设备
  • 企业的往来账款包括哪些
  • 财务费用利息收入怎么结转
  • php冒泡法排序
  • 工程施工暂估的成本的依据
  • 企业安置残疾人如何残联备案
  • 个人出租商用房个人所得税
  • Error in render: “TypeError: Cannot read properties of undefined (reading ‘length‘)“,深层次数据处理报错????
  • 提供有形动产租赁服务的增值税税率为
  • 合作公司投资方式
  • 购入固定资产预付款怎么做账
  • 个体户需要税务报道不
  • 差额开票和全额开票
  • 一般纳税人增值税减免政策2023
  • 计提费用账务处理
  • 企业收到退回的银行汇票多余款项
  • 应收账款无法收回会计分录
  • 收到政府补助的会计分录
  • 长期股权投资如何确认
  • 总公司给分公司拨款怎么做账
  • 人力成本费用率和人工成本利润率
  • 收到票据又转背书付了账务处理
  • 企业研发费用怎么证明
  • 企业买车购置税可以抵增值税吗
  • 企业对疫情
  • 总分包模式和总承包模式
  • sqlserver数据库怎么导出
  • MySQL execute、executeUpdate、executeQuery三者的区别
  • vmware虚拟机找不到了
  • solaris netstat
  • 怎样禁用ie
  • win10计算机管理器
  • win7系统局域网无法看到其他电脑
  • windows8.1更新windows10
  • centos7.6 iptables
  • jquery移动节点的方法
  • node创建服务
  • unity3d应用开发
  • js多选
  • 慎用是能用还是不能用
  • js函数function用法
  • unity射击游戏毕业设计
  • JavaScript控制台输出
  • html dom元素
  • 安卓手机后退键
  • “python”
  • 产品税务编号查询系统官网
  • 管道运输合同需不需要缴纳印花税
  • 外经证办理流程在哪个网站申请
  • 辽宁事业单位职测考试时间多长
  • 深圳税务忘记密码
  • 收入较去年同期增长怎么算
  • 计算土地增值税时下列费用准予从收入总额中扣除的有
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设