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

  • 很多简单的道理不是谁都明白(很多简单的道理都不懂是什么原因)

    很多简单的道理不是谁都明白(很多简单的道理都不懂是什么原因)

  • bilibili电视版怎么开弹幕(bilibili电视版怎么用)

    bilibili电视版怎么开弹幕(bilibili电视版怎么用)

  • 360兼容模式怎么设置在哪里(360兼容模式怎么设置在哪里中南财经政法大学代码)

    360兼容模式怎么设置在哪里(360兼容模式怎么设置在哪里中南财经政法大学代码)

  • ps怎么设计淘宝店铺logo(ps淘宝页面怎么做)

    ps怎么设计淘宝店铺logo(ps淘宝页面怎么做)

  • mix2s无线充电充不了(mix2s无线充电器)

    mix2s无线充电充不了(mix2s无线充电器)

  • 华为顶端下拉菜单没了(华为顶端下拉菜单不见了)

    华为顶端下拉菜单没了(华为顶端下拉菜单不见了)

  • 苹果x屏幕摔出白线(苹果x屏幕摔出黑色块修多少钱)

    苹果x屏幕摔出白线(苹果x屏幕摔出黑色块修多少钱)

  • 手机换外屏玻璃的弊端(手机换外屏玻璃对手机有影响吗)

    手机换外屏玻璃的弊端(手机换外屏玻璃对手机有影响吗)

  • 新硬盘使用前怎么处理(新硬盘使用前需要格式化吗)

    新硬盘使用前怎么处理(新硬盘使用前需要格式化吗)

  • 压盖板和换屏不一样吗(压盖板和换屏有什么区别)

    压盖板和换屏不一样吗(压盖板和换屏有什么区别)

  • 钉钉的聊天记录能恢复吗(钉钉的聊天记录存在哪里)

    钉钉的聊天记录能恢复吗(钉钉的聊天记录存在哪里)

  • 路径查找器快捷键(路径查找器快捷键用了没反应)

    路径查找器快捷键(路径查找器快捷键用了没反应)

  • q9550相当于i3几代(q9650相当于i3多少)

    q9550相当于i3几代(q9650相当于i3多少)

  • 电脑自动重启是什么原因(电脑自动重启是主板坏了吗)

    电脑自动重启是什么原因(电脑自动重启是主板坏了吗)

  • iqoo充电变慢了怎么回事(iqoo充电变慢了从新插一下就好了怎么回事)

    iqoo充电变慢了怎么回事(iqoo充电变慢了从新插一下就好了怎么回事)

  • 手机酷狗怎么剪切歌曲(手机酷狗怎么剪辑歌曲其中一段)

    手机酷狗怎么剪切歌曲(手机酷狗怎么剪辑歌曲其中一段)

  • b站是什么(b站是什么平台app)

    b站是什么(b站是什么平台app)

  • 私房红包在哪里(私房红包在哪里领)

    私房红包在哪里(私房红包在哪里领)

  • 苹果手表电池能用几年(苹果手表电池能用一天吗)

    苹果手表电池能用几年(苹果手表电池能用一天吗)

  • vivoz5x电池耐用吗(vivoz5x的电池容量)

    vivoz5x电池耐用吗(vivoz5x的电池容量)

  • 小米手机降温设置(小米手机设置降温功能在哪里)

    小米手机降温设置(小米手机设置降温功能在哪里)

  • 蜻蜓fm怎么手动调频(蜻蜓fm怎么手动下载视频)

    蜻蜓fm怎么手动调频(蜻蜓fm怎么手动下载视频)

  • 怎样定位手机位置(怎样定位手机位置信息)

    怎样定位手机位置(怎样定位手机位置信息)

  • 计提附加税金额
  • 增值税专用发票怎么开
  • 办税人员可以不交社保吗
  • 企业所得税季度申报表A类
  • 如何判断会计政策变动
  • 费用分割单模板
  • 免税商品进项增值税发票怎么做账
  • 以前年度损益调整结转到哪里
  • 开技术服务费发票怎么做账
  • 金蝶kis 反结账
  • 咨询服务费的印花税率
  • 汇算清缴调增的金额,如何做会计分录
  • 全资子公司合并报表是权益法还是成本法
  • 净收益营运指数大于1说明什么
  • 纳税人如何办理纳税申报流程
  • 个人借公司款利率多少合法
  • 滞留票的进项税能抵扣吗
  • 发票已认证部分怎么撤销
  • 为什么餐费不能计入在差旅费
  • 高新企业减免所得税政策
  • 为什么公司信用代码不对
  • 企业汽油费会计分录
  • 跨年度残保金退税怎么算
  • 1697508857
  • 失控发票如何转出
  • 成本分摊会计
  • 应用程序发生异常 未知的软件异常(0xe06d7363)
  • 贷款减值准备和减值准备支出的区别
  • echarts w3c
  • elementui能做什么
  • srv.exe病毒
  • 土增税清算扣除项目分摊公式
  • 企业票据贴现费怎么算
  • php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
  • 农民影视2023 最新版
  • 家里装饰镜太多了怎么化解
  • 债务重组收益会计处理
  • opencv开发项目
  • 哪些项目计入其他应收款
  • 红字发票信息表填好后再怎么操作
  • 普票退货需要开红字信息表吗
  • mongodb启动
  • 小规模免税怎么做账务处理
  • 地价计入房产原值文件解读
  • 离岸价的含义
  • 资产负债表中应付账款项目应根据什么填制
  • 农业发展公司有没有库存商品的
  • 视同销售收入是纳税调整项目吗?
  • 开票给子公司的流程
  • 弥补企业以前年度亏损 顺序
  • 人力资源差额税率
  • 研发支出是科目吗
  • 企业一般账户开户申请理由
  • 工业产值是指
  • 怎么设置材料
  • win8系统打开我的电脑就黑屏
  • bash是什么意思中文翻译
  • 快速切换用户是什么意思
  • Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步配置教程
  • un_a.exe
  • 一台电脑多个用户组怎么显示在一个屏幕上
  • windows8开机蓝屏
  • remupd.exe - remupd是什么进程 有什么用
  • rftray.exe - rftray是什么进程 有什么用
  • fs是什么文件夹
  • win8谷歌浏览器出现无法访问此网站
  • ExtJS 4.2 Grid组件单元格合并的方法
  • jquery()
  • linux find命令用法
  • perl keys
  • parentElement,srcElement的使用小结
  • jquery的实现原理
  • 《JavaScript高级程序设计》pdf链接
  • javascript indexOf函数使用说明
  • 退发票操作流程
  • 从国外进口到国内销售的商品
  • 青岛的红叶什么时候红
  • 于开年 山东省国家税务局
  • 代售门票业务税务处理
  • 伊川娘娘山传说
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设