likes
comments
collection
share

部署:微前端初步完成

作者站长头像
站长
· 阅读数 8

前言

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

最终效果

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

基座在线网址访问

生成头像和用户名

  1. 在微应用main.js, 接收MicroAppStateActions实例
// 微应用main.js
export async function mount(props) {
  ...
  // 将基座传入的MicroAppStateActions挂载到Vue实例原型上
  Vue.prototype.$qiankunActions = props;
  render(props);
}
  1. 微应用将用户名和头像添加到全局状态
// 微应用 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事件
// 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
yarn add npm run all
  1. 编写脚本
{
  "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
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. 目录结构
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情况

部署:微前端初步完成

if (!-e $request_filename) {
    rewrite ^/(.*) /index.html last;
    break;
}

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

总结

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

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

有问题可以私聊我哈。