部署:微前端初步完成

前言

前一段时间, 写了强盛集团管理系统(基于 BPMN 引擎的工作流系统), 打算使用 qiankun 改造下项目架构, 迈向微前端, 今天开始第七章部署: 微前端初步完成。

最终效果

展示强盛集团管理系统(基于 BPMN 引擎的工作流系统)【独立部署】部分页面

基座在线网址访问

生成头像和用户名

上一章接入:强盛集团管理系统介绍了基座向微应用分发数据进行通信, 而目前基座没有头像和用户名, 那么就通过工作流(微应用)向基座通信来补全这部分的知识

  1. 在微应用main.js, 接收MicroAppStateActions实例
js 复制代码
// 微应用main.js
export async function mount(props) {
  ...
  // 将基座传入的MicroAppStateActions挂载到Vue实例原型上
  Vue.prototype.$qiankunActions = props;
  render(props);
}
  1. 微应用将用户名和头像添加到全局状态
js 复制代码
// 微应用 layout/index.vue
mounted() {
    if (window.__POWERED_BY_QIANKUN__) {
      let userInfo = this.$qiankunActions.globalState.userInfo;
      this.$qiankunActions.setGlobalState({
        userInfo: { ...userInfo, avatar: this.avatar, username: this.username }
      });
    }
}
  1. 基座通过监听全局状态, 会触发onGlobalStateChange事件
js 复制代码
// qiankun/globalState.js

qiankunActions.onGlobalStateChange((state, oldVal) => {
  for (const key in state) {
    if (Object.prototype.hasOwnProperty.call(state, key)) {
      const item = state[key];
      initialState[key] = item;
      if (key === "userInfo") {
        // 将userInfo缓存到vuex和local Storage里, 不贴代码了
        store.commit("user/setUserInfo", item);
        continue;
      }
    }
  }
});
  1. 基座Layoutheader.vue, 引用 vuex 的用户名和头像即可

批量命令

当每次启动、打包都需要基座、各微应用一个一个去执行,属实比较麻烦

  1. 安装 npm-run-all
yaml 复制代码
yarn add npm run all
  1. 编写脚本
json 复制代码
{
  "scripts": {
    "serve:base": "vue-cli-service --mode development serve",
    "serve:system": "cd ../ && cd system && start cmd /k yarn serve",
    "serve": "npm-run-all --parallel serve:*",
    "build:base": "vue-cli-service --mode production build",
    "build:system": "cd ../ && cd system && yarn build",
    "build": "npm-run-all build:*"
  }
}
  • --parallel: 并行运行多个命令
  • start cmd /k yarn serve: 会打开一个新窗口后执行yarn serve指令,原窗口不会关闭。
  • &&: 可以把多条 npm script 按先后顺序串起来使用
  1. 测试: 执行yarm serve

发现会新开一个 cmd 窗口, 而后运行的端口 1100 先成功了, 也正是命令并行执行。

打包

  1. 配置打包文件, 改造vue.config.js
js 复制代码
const { defineConfig } = require("@vue/cli-service");
const packageName = require("./package.json").name;
module.exports = defineConfig({
  publicPath: "/",
  outputDir: `../micro-web/${packageName}`,
  configureWebpack: {
    output: {
      libraryTarget: "umd",
      library: "m-system",
    },
  },
});

在前面几章有所提及, 配置打包后的公共路径和包路径

libraryTarget 为 qiankun 需要的包文件格式

  1. 在基座中执行yarn serve
  1. 目录结构
css 复制代码
micro-web
├─css
├─fonts
├─js
├─oa
│  ├─css
│  ├─fonts
│  ├─img
│  └─js
└─system
    ├─css
    └─js

分配域名

以腾讯云部署为例

  1. 在 DNS 解析中添加一条主机记录, 例如micro
  1. 此时就会多一个二级域名, 例如micro.xiaoxi.work, 申请一个免费的 SSL 证书
  1. 下载证书, 添加到后续的 Nginx 配置中

部署

qiankun 部署有两种:

  • 一种是基座和微应用在同一服务器同一端口
  • 一种是主应用和微应用部署在不同的服务器

本次介绍的是第一种, 基座与微应用部署在一起

使用虚拟主机部署太多麻烦, 我还是选择云服务器+宝塔部署讲讲

  1. 在宝塔上添加站点, 输入域名micro.xiaoxi.work
  1. 添加SSL证书和强制HTTPS
  1. 添加伪静态, 为了解决一刷新就404情况
js 复制代码
if (!-e $request_filename) {
    rewrite ^/(.*) /index.html last;
    break;
}

此时就可以通过域名进行访问了

总结

至此,强盛集团管理系统已经可以在外网正常访问。微前端项目初步完成。

目前仍存在一些 bug,例如微应用间跳转不成功等,仍需要较长时间去解决,对此 bug 有兴趣也可以看看github

有问题可以私聊我哈。

相关推荐
NiNg_1_23412 分钟前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1231 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~2 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语2 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport2 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap
brrdg_sefg2 小时前
WEB 漏洞 - 文件包含漏洞深度解析
前端·网络·安全
胡西风_foxww2 小时前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
m0_748254882 小时前
vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0
前端·vue.js·elementui
星就前端叭3 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc
m0_748234523 小时前
前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)
前端·webpack·node.js