京东微前端microApp 项目实战

1、什么项目适合做?

公司项目有N个系统构成一个大体积应用,代码越来越多,运行打包十几分钟以上

2、技术栈要求?

目前我说的这版是vue2为基座,子应用vue2,vue3,react都行,vite版本是单独的,自己去官网看着配。

3、基座需要配置修改哪些东西才能跑到子应用呢?

基础配置在基座(包含导航侧边栏登录等,基础组件,不可用的组件扔npm包里,子组件自己下载就行了)

先做基座的配置项:

main.js里配置import microApp from "@micro-zoe/micro-app";
/** microApp 启动 */
microApp.start({'disable-memory-router': true, // 关闭虚拟路由系统'disable-patch-request': true, // 关闭对子应用请求的拦截
}).env.development /  .env.production 里配置子应用端口号,有几个配几个VUE_APP_URL_chirdren1 = http://localhost:40001/ #子应用1
router.js配置// 配置项目需要单独开启的页面,不带基座里的导航侧边栏等内容走这里{path: '/sub/chirdren1',component: () => import('@/layout/components/appMain/chirdren1'),hidden: true},// 带基座导航侧边栏等内容的页面走这里{path: '/chirdren1',component: () => import('@/layout/components/appMain/chirdren1'),name: 'drg',meta: {title: 'DRG智能管理系统'},hidden: true},// 防止连续点击多次路由报错
let routerPush = Router.prototype.push;
Router.prototype.push = function push(location) {return routerPush.call(this, location).catch(err => err)
}
export default new Router({mode: 'history', // 去掉url中的#scrollBehavior: () => ({y: 0}),routes: constantRoutes
})
放router.beforeEach的js配置import { MODULE_LIST } from '@/utils/constant'// 匹配系统路径 确定当前系统let module = MODULE_LIST.find(item=>item.baseUrl == to.path)
if (module) {Cookies.set("menuId", module.id);
}这里是说,项目有很多,但是这里我们要给他设定默认的id,让基座知道往哪跳转constant.jsexport const MODULE_LIST = [{id: '1',name: '子系统1',baseUrl: '/chirdren1'},{id: '3',name: '子系统2',baseUrl: '/chirdren2'},
]
建一个去往子应用文件的地方appMain文件夹chirdren1.vue<template><div><micro-app name="chirdren1" :url="appUrl" baseroute="/chirdren1"></micro-app></div>
</template><script>
import microApp from '@micro-zoe/micro-app'
export default {data() {return {module: null,appUrl: process.env.VUE_APP_URL_chirdren1}},created() {},mounted() {microApp.addDataListener('chirdren1', (data) => {console.log('来自子应用chirdren1的数据', data)if(data.type === 'logout') {this.$store.dispatch('LogOut').then(() => {// Cookies.remove("menuId");this.$router.push({path: '/login'})})}})},methods: {goUrl(url) {console.log('===url', url)microApp.router.push({name: 'chirdren1', path: '/chirdren1#'+url})}}
}
</script>

name名字很重要,要对应起来,要不进入子应用的时候会有问题

再就是基座里,你切换其他系统的时候需要配置的地方,点击切换系统的方法

changeValue(val) {// 筛选菜单路由表this.$store.dispatch("GenerateRoutes", {val,}).then((accessRoutes) => {// 根据roles权限生成可访问的路由表this.$router.addRoutes(accessRoutes); // 动态添加可访问路由表// 这里去匹配上几个文件配置的系统id,然后进行跳转操作let currentModule = MODULE_LIST.find(item=>item.id == val)location.href = currentModule.baseUrl;});}},

上面操作完成,恭喜你微前端已经掌握了90%

因为子应用的配置相比较而言少的离谱咯

下面是子应用的配置

vue.config.js
配置上子应用的端口号40001router.js除去正常路由配置好后加上下面的// 防止连续点击多次路由报错
let routerPush = Router.prototype.push;
Router.prototype.push = function push(location) {return routerPush.call(this, location).catch(err => err)
}
export default new Router({mode: 'hash', // 去掉url中的#scrollBehavior: () => ({y: 0}),routes: constantRoutes
})
router.beforeEach里配上import { MODULEID } from '@/utils/constant'里面是这个
export const MODULEID = 1/** 模块名称 */
export const MODULE_NAMES = {'1': '/chirdren',
}router.beforeEach里配上let val = MODULEID// 判断当前用户是否已拉取完user_info信息store.dispatch('GetInfo').then((infoRes) => {const chars = infoRes.modules.split(",");// 用户所属系统模块集合Cookies.set("userModules", chars);isRelogin.show = falsestore.dispatch("GenerateRoutes", {val,}).then(accessRoutes => {// 根据roles权限生成可访问的路由表router.addRoutes(accessRoutes) // 动态添加可访问路由表next({...to,replace: true}) // hack方法 确保addRoutes已完成})}).catch(err => {store.dispatch('LogOut').then(() => {Cookies.remove("menuId");// Message.error(err)next({path: '/'})})})

配完这些恭喜你,成功跳转到子应用了,需要基座下发或者子应用回传数据,官网api就有就不写了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析MySQL-索引篇01

什么是索引&#xff1f; 索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;类似于数据的目录。 索引的分类 按数据结构分类&#xff1a; MySQL 常见索引有 BTree 索引、HASH 索引、Full-Text 索引。 Innodb是MySQL5.5之后的默认存储引擎&#xff0c;BTree索引类型也…

量产工具一一文字系统(三)

目录 前言 一、文字数据结构抽象 1.描述一个文字的位图 2.描述一个字库操作 3.font_manager.h 二、实现Freetype封装 1.freetype.c 三、实现文字管理 1.font_manager.c 四、单元测试 1.font_test.c 2.disp_manager.c 3.disp_manager.h 4.上机测试 前言 前面我们…

从搜索框的提示词中再探防抖和节流

前言 最近逛掘金时&#xff0c;看到了一篇文章。发现是我之前写过的一篇文章主题是防抖和节流的&#xff0c;看防抖时没感觉哪里不一样&#xff0c;但是当我看到节流时发现他的节流怎么这么繁琐(・∀・(・∀・(・∀・*)&#xff1f; 抱着疑惑的想法&#xff0c;我仔细拜读了这…

深度学习简介-AI(三)

深度学习简介 深度学习简介深度学习例子深度学习训练优化1.随机初始化2.优化损失函数3.优化器选择4.选择/调整模型结构 深度学习常见概念隐含层/中间层随机初始化损失函数导数与梯度优化器Mini Batch/epoch 深度学习训练逻辑图 深度学习简介 深度学习例子 猜数字 A: 我现在心…

机器学习Day10:聚类

概念 聚类是按照某个特定标准把一个数据集分割成不同的类或簇&#xff0c;使得同一个簇内的数据对象的相似性尽可能大&#xff0c;同时不在同一个簇中的数据对象的差异性尽可能大 聚类的过程 数据准备&#xff1a;特征标准化和降维特征选择&#xff1a;从最初的特征中选择最…

rust 终端显示综合例程

文章目录 demo程序1 terminal_size2 term_grid3 crossterm3.1 style 4 lscolors准备内容4.1 LsColors 5 users5.1 获取用户/用户组信息5.2 通过缓存获取 demo程序 综合demo 各个库使用demo 1 terminal_size 一个获取终端界面大小的库&#xff0c;支持linux、macos、windows。…

keil5模拟 仿真 报错没有读写权限

debug*** error 65: access violation at 0x4002100C : no write permission 修改为&#xff1a; Dialog DLL默认是DCM3.DLL Parameter默认是-pCM3 应改为 Dialog DLL默认是DARMSTM.DLL Parameter默认是-pSTM32F103VE

【机器学习】机器学习与电商推荐系统的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在电商推荐系统中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 特征工程 1.2 模型选择1.2.1 协同过滤1.2.2 矩阵分解1.2.3 基于内容的推荐1.2.4 混合推荐 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 …

苹果电脑如何录屏,3个方法,帮你搞定

“最近新买了一台苹果电脑&#xff0c;但这是我第一次使用&#xff0c;有很多功能都不太了解。想问问大家苹果电脑如何录屏啊&#xff1f;可以教我一下吗&#xff1f;先提前谢谢大家啦&#xff01;” 苹果电脑以其出色的性能和独特的设计&#xff0c;深受全球用户的喜爱。而在…

Win11禁止右键菜单折叠的方法

背景 在使用windows11的时候&#xff0c;会发现默认情况下&#xff0c;右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单&#xff0c;然后再点击。而且每次在显示菜单时先是全部展示&#xff0c;再隐藏一下&#xff0c;看着着实难…

源代码层面分析Appium-inspector工作原理

Appium-inspector功能 Appium Inspector 基于 Appium 框架&#xff0c;Appium 是一个开源工具&#xff0c;用于自动化移动应用&#xff08;iOS 和 Android&#xff09;和桌面应用&#xff08;Windows 和 Mac&#xff09;。Appium 采用了客户端-服务器架构&#xff0c;允许用户通…

51单片机嵌入式开发:STC89C52操作8八段式数码管原理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 STC89C52操作8八段式数码管原理 1 8位数码管介绍1.1 8位数码管概述1.2 8位数码管原理1.3 应用场景 2 原理图图解2.1 74HC573原理2.2 74HC138原理2.3 数码管原理 3 数码管程序…

豪车视频改字,节假日祝福视频改字小程序制作搭建开发

目录 前言&#xff1a; 一、视频改字小程序功能介绍 二、怎么对短视频模板进行改字&#xff1f; 三、这个短视频改字的项目怎么样&#xff1f; 总结&#xff1a; 前言&#xff1a; 现在很多豪车改字的短视频&#xff0c;节假日祝福的小视频&#xff0c;有不少直播在弄这个…

使用 HBuilder X 进行 uniapp 小程序开发遇到的问题合集

文章目录 背景介绍问题集锦1. 在 HBuilderX 点击浏览器运行时&#xff0c;报 uni-app vue3编译器下载失败 安装错误2.在 HBuilderX 点击微信小程序运行时&#xff0c;报 微信开发者工具打开项目失败&#xff0c;请参阅启动日志错误 背景介绍 HBuilder X 版本&#xff1a;HBui…

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…

Rust学习笔记007:Trait --- Rust的“接口”

Trait 在Rust中&#xff0c;Trait&#xff08;特质&#xff09;是一种定义方法集合的机制&#xff0c;类似于其他编程语言中的接口&#xff08;java&#xff09;或抽象类(c的虚函数)。 。Trait 告诉 Rust 编译器: 某种类型具有哪些并且可以与其它类型共享的功能Trait:抽象的…

【C++】#1

关键字&#xff1a; 基本框架、多个main执行、快捷键、cout规则 基本框架&#xff1a; #include <iostream> using namespace std;int main() {//具体内容return 0; } 多个main函数可执行&#xff1a; 常用快捷键&#xff1a; cout规则&#xff1a;

Qt中文乱码如何解决

目录 一、使用建议 二、其它设置 一、使用建议 Qt对中文的支持不是很友好&#xff0c;使用QtCreator会出现各种乱七八糟的中文代码问题&#xff0c;如何处理这种问题&#xff1f; &#xff08;1&#xff09;粘贴别人的代码时&#xff0c;先在记事本里粘贴一遍&#xff0c;再…

信号与系统-实验5 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征&#xff0c;掌握在时域求解信号的各种变换运算&#xff1b; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法&#xff1b; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法&#xff1b; 4、掌握利用 MATLAB 求解微分方程&a…

Android隐藏状态栏和修改状态栏颜色_亲测有效

本文记录了隐藏状态栏和修改状态栏颜色以及电量、WiFi标志等内容的模式显示&#xff0c;亲测有效。 1、隐藏屏幕状态栏 public void hideStatusBar(BaseActivity activity) {Window window activity.getWindow();//没有这一行无效window.addFlags(WindowManager.LayoutParam…