微前端三:qiankun 协作开发和上线部署

news2025/3/13 21:12:57

我们先看qiankun怎么上线部署:
我这边用的是yaml 文件在 rancher上部署的:
在这里插入图片描述
base是基座,这里每个应用都是一个服务,这个还是跟之前一样并没有区别,那如何在一个域名上挂载多个服务呢?
最开始我们主要是在ingress上配置:
在这里插入图片描述
这样的好处是每一个域名对应的服务是单独配置的,可以做到定制化配置,域名没有配置的服务肯定是访问不到的。但这么做有一个问题,就是当域名很多了,会有一个很长的ingress需要维护,很不方便。

后期我们做了优化,将配置放到了基座服务对应的 nginx 中,

worker_processes  1;
user root;
events {
  worker_connections  10240;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  rewrite_log on;

  sendfile        on;
  #tcp_nopush     on;

  keepalive_timeout  65;

  gzip  on;

  #include /etc/nginx/conf.d/*.conf;
  client_max_body_size 100M;

  client_header_buffer_size    128k;
  large_client_header_buffers  4  128k;
  server {
    listen    80;
    server_name  *.aibee.cn;
    root  /usr/share/nginx/html;
    #定义服务器的默认网站根目录位置
    #root /usr/share/nginx/html;
	# 这里是base对应的请求后端接口
	location /union/portal {
	proxy_pass http://union-portal-backend:8080;
	}
	# 这里是子应用入口 /configcenter是 registerMicroApps 注册app的 entry值
	location /configcenter {
	proxy_pass http://micro-configcenter:80;
	}
    #默认请求
    location / {
      try_files $uri $uri/ /index.html;
      #定义首页索引文件的名称
      index index.php index.html index.htm;
        sub_filter '数智全息驾驶舱' '测试';
    }

    location ~ .*\.(?:htm|html)$ {
      add_header Cache-Control "no-cache";
    }
    #禁止访问 .htxxx 文件
    location ~ /.ht {
      deny all;
    }
  }
}

这样的好处是只需要在基座的 nginx中配置一次,ingress配置:
在这里插入图片描述
还是按照一个域名指向一个服务(基座对应的服务),简洁了很多。然后在前端代码中限制访问的app,因为nginx中配置了所有对应的子应用。

qiankun 协作开发

qiankun独立开发,微前端开发两种方式:
1、本地启动基座服务和子应用
2、本地只启用子应用服务
很显然第二种更加适用,在多团队协作中,我们不大可能所有人都有基座的权限,一般都是本地启动自己的服务开发、上线;
我们现在的做法是 基座作为入口,即登陆逻辑在基座,登陆信息通过props下发到各个子应用。
我们先看下本地开发时基座 - 我们的base代码的vue.config.js 配置:

// vue.config.js 配置
module.exports = {
  devServer: {
    https: false,
    hotOnly: false,
    disableHostCheck: true,
    headers: {
      // 允许子应用跨域
      'Access-Control-Allow-Origin': '*'
    },
    proxy: {
      '^/union/portal': {
        target: 'https://micro-test.ai.cn/',
        ws: false,
        changeOrigin: true,
        secure: false
      },
      '^/configcenter': {
        target: 'http://localhost:3002',
        changeOrigin: true,
        secure: false
      }
    }
  },
  productionSourceMap: false
};

之前我们已经将微前端部署在了线上,基座即base直接 target 到线上域名,这样可以通过线上服务的nginx请求对应的后端地址
/mallbi 和 /configcenter 这个数值即注册微服务的entey数值,通过它进入子应用

再看下对应子应用configcenter的vue.config.js 配置:

/* eslint-disable */
const { name } = require('./package');
/* eslint-enable */
module.exports = {
  publicPath: '/configcenter',
  lintOnSave: false,
  devServer: {
    https: false,
    hotOnly: false,
    disableHostCheck: true,
    port: 3002,
    proxy: {
      '^/configcenter/union/api': {
        target: 'https://micro-test.ai.cn/',
        changeOrigin: true,
        secure: false,
        pathRewrite: {
          '^/configcenter/union/api': '/configcenter/union/api'
        }
      },
      // '^/': {
      //   target: 'https://micro-test.ai.cn/'
      // }
    }
  },
  configureWebpack: {
    output: {
      library: `${name}-[name]`,
      libraryTarget: 'umd', // 把微应用打包成 umd 库格式
      jsonpFunction: `webpackJsonp_${name}`
    }
  },
  productionSourceMap: false
};

publicPath 设置为注册微服务的entey数值,
port 端口要和 基座配置的端口保持一致,
proxy 第一组数据是匹配路径请求到已经部署在了线上微前端,通过线上服务的nginx请求到对应的后端地址

通过上面两个 vue.config.js 配置,我们就可以实现第一种开发方案,通过本地启动基座服务和子应用开发项目。
而当我们打开子应用的 proxy的第二组,就可以实现第二种更便捷的方式开发项目,原理是:
当我们单独启动子应用时,一开始服务 会走proxy的第二组拉取 域名对应的静态资源,没有token就会拉取到基座的静态资源,然后登陆调转到子应用,entey数值configcenter,就会通过本地的publicPath: ‘/configcenter’,打到本地服务。

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

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

相关文章

【调度算法】NSGA II

简介 NSGA-II(Nondominated Sorting Genetic Algorithm II)是一种经典的多目标优化算法,由Srinivas和Deb于2000年在NSGA的基础上提出,用于解决多目标优化问题。相较于NSGA,NSGA-II在运行速度和解集的收敛性上表现更好…

nginx的优先级和匹配方式

Nginx的location的优先级和匹配方式: 在http模块当中有server,在server模块才有location,location匹配的是uri /test /image 在一个server当中有多个location,如何来确定匹配那个location Nginx支持正则表达式: ^…

PLC 学习day01 了解PLC 的组成和知识。

1.资料来源 链接:3.三菱PLC编程视频关于PLC工作原理的介绍_哔哩哔哩_bilibili 2. PLC 的知识 2.1 PLC 的概述及特点功能 PLC是可编程逻辑控制器(Programmable Logic Controller)的英文缩写,是融合了继电器控制功能和计算机运算功…

补体C3/C4(C3/C4)介绍

补体是一种血清蛋白质,存在于人和脊椎动物血清及组织液中,不耐热,活化后具有酶活性、可介导免疫应答和炎症反应。可被抗原-抗体复合物或微生物所激活,导致病原微生物裂解或被吞噬。可通过三条既独立又交叉的途径被激活&#xff0c…

DNS(二)

实现 Internet DNS 架构 架构图 实验环境 关闭SELinux、Firewalld。时间保持一致 主机名IP角色client192.168.28.146DNS客户端,DNS地址为192.168.28.145localdns192.168.28.145本地DNS服务器(只缓存)forward192.168.28.144转发目标DNS服务…

TARJAN复习 求强连通分量、割点、桥

TARJAN复习 求强连通分量、割点、桥 文章目录 TARJAN复习 求强连通分量、割点、桥强连通分量缩点桥割点 感觉之前写的不好, 再水一篇博客 强连通分量 “有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有…

【vue】vue实现海康ws协议的实时监控播放:

文章目录 一、效果图:二、实现过程:【1】官网下载h5player.js:【2】引入h5player.min.js:【3】使用: 一、效果图: 二、实现过程: 【1】官网下载h5player.js: 【H5视频播放器开发包】…

Linux shell编程学习笔记13:文件测试运算

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、逻辑、字符串、文件测试等多种运算。前面几节我们依次研究了 Linux shell编程 中的 字符串运算、算术运算、关系运算、布尔运算 和 逻辑运算,今天我们来研究 Linux shell编程中的文件测…

PowerShell批量修改DNS域名解析

批量添加DNS A记录 $dnsServerName"" # DNS服务器的服务器名称,如果是在DNS服务器本机执行则可留空 $containerName"test.com" # 域名的后缀也就是DNS Zone Name $mydns[WMIClass]"ROOT\MicrosoftDNS:MicrosoftDNS_resourceRecord"…

yarn : 无法加载文件 C:\Program Files\nodejs\yarn.ps1

问题描述: 问题分析: 这个错误提示说明在电脑系统上禁止运行 PowerShell 脚本,因此导致无法加载 Yarn 的安装脚本。这是由于系统的执行策略(Execution Policies)设置所导致的。 解决方法: 1. 以管理员身…

关于6轴球腕机械臂的肩部奇异描述纠正

对于常见的球腕6轴机械臂构型,在大多数资料中奇异点描述如下: 肩部奇异点(Shoulder singularity): 肩部奇异点是在机器人手腕的中心与J1轴关节在同一条直线上时发生。这种情况下,会导致关节轴1和4试图瞬间旋…

【Java-框架-SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手 - 简易版

前言 【描述】 "SpringMVC"框架的简单创建与使用,快速上手; 【环境】 系统"Windows",软件"IntelliJ IDEA 2021.1.3(Ultimate Edition)";“Java版本"1.8.0_202”,“Spring"版…

【Machine Learning】02-Advanced Learning Algorithms

02-Advanced Learning Algorithms 2. Advanced Learning Algorithms2.1 Neural Network2.1.1 概述2.1.2 Neural network model2.1.3 TensorFlow的实现2.1.4 Neural network implementation in Python2.1.5 强人工智能(AGI) 2.2 Vectorization2.2.1 矩阵使…

Hadoop分布式文件系统-HDFS

1.介绍 HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。 2.HDFS 设计原理 2.1 HDFS 架构 HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成:

keep-alive 是 Vue 的一个内置组件,用于缓存其他组件的实例,以避免重复渲染和销毁,它可以在需要频繁切换的组件之间提供性能优化

目录 keep-alive 使用 keep-alive 的示例代码: 手动清除组件缓存的示例代码: keep-alive 组件有以下几个优点: keep-alive 的原理: 使用 keep-alive 组件,你可以包裹需要缓存的组件,然后这些组件在切…

基于Springboot实现在线答疑平台系统项目【项目源码+论文说明】

基于Springboot实现在线答疑平台系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大师生的喜爱,也逐渐进入了每个学生的使用。互联网具有便利性,速度快,效率高,成本…

Brew包的基本安装(手把手教学)

大家在使用mac或者linux系统的过程中,大致了解Homebrew的用处,不多说直接进入正题 相信大家已经看到了Homebrew官网的安装介绍了,我们依然使用终端(不去下载应用过于麻烦) 一、开始安装 在按照官网安装时发现会安装失…

Linux常见基本指令合集及其效果展示

Linux基本命令 文章目录 Linux基本命令1. whoami2. who3. clear4. pwd5. 查看文件信息5.0 什么是文件5.1 ls5.2 ls -l5.3 ls -a5.4 ls -a -l 6. 补充知识:对于Linux系统目录的认知6.1 什么是路径 7. cd8. touch9. mkdir10. rmdir11. rm12. man13. cp14. mv15. nano1…

(Python) Python中三种时间格式的转换方法

1. 时间元组 1.1. 时间元组和时间戳的互相转化 import time,datetime # 获取当前时间的时间元组 t time.localtime() print(t) # 时间元组转时间戳 timestamp time.mktime(t) print(timestamp) # time.struct_time(tm_year2019, tm_mon10, tm_mday23, tm_hour23, tm_min15,…

clion 此文件不属于任何项目目标

如果你已经尝试了所有办法都不行,那就试试这个,不需要重启ide,啥都不用干。版本clion 2023.2.2