部署:微前端初步完成

前言

前一段时间, 写了强盛集团管理系统(基于 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

有问题可以私聊我哈。

相关推荐
fishmemory7sec2 分钟前
Electron 使⽤ electron-builder 打包应用
前端·javascript·electron
工业互联网专业32 分钟前
毕业设计选题:基于ssm+vue+uniapp的校园水电费管理小程序
vue.js·小程序·uni-app·毕业设计·ssm·源码·课程设计
豆豆1 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
计算机学姐1 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
twins35202 小时前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky2 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~2 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
杨荧3 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html