# 概述

该使用手册,将会介绍如何将开放文档集成到项目中。其中集成技术主要是借助了 qiankun 框架,感兴趣的同学可以查看其官方文档:https://qiankun.umijs.org/zh/guide 。不想细研究的同学,也可以直接根据以下步骤,进行快速开发。下面会以 vue-cli 搭建的项目为例,其他技术栈的使用类似。
开放文档可单独访问,这里以 https://demo.fizzgate.com/module/open-document/index.html?id=1437635360536920065为例进行说明 。亦可通过顶部菜单的 "文档演示" 进行效果查看。

# 前端开发操作步骤

1、主应用安装 qiankun 依赖

yarn add qiankun

2、修改主应用的webpack配置。这里以 vue-cli 生成的项目为例,修改 vue.config.js 文件的 devServer 配置
(1)设置请求头跨域
(2)设置 开放文档 的代理访问地址
(3)设置 开放文档 的 接口访问地址

devServer: {
    // port: 9527,
    headers: {
        "Access-Control-Allow-Origin": "*"
    },
    proxy: {
        '/module/': {
            target: 'https://demo.fizzgate.com',
            changeOrigin: true
        },
        '/api': {
            target: 'https://demo.fizzgate.com/api',
            ws: true,
            changeOrigin: true,
            pathRewrite: {
                '^/api': '/'
            }
        }
    }
}

3、主应用加载 开放文档

(1)设置一个容器,用于放置 开放文档 微前端应用

<div class="micro" id="micro"></div>

若想在微应用加载过程中,显示自定义加载动画,可以在micro容器内部放一个loading组件,如:

<div class="micro" id="micro"><Loading /></div>

(2)在 mounted 钩子函数里手动加载 开放文档 微应用,在 beforeDestroy 钩子函数里进行微应用卸载
注意:props中的documentId 为地址 "https://demo.fizzgate.com/module/open-document/index.html?id=1437635360536920065" 中的 id 值。

import { loadMicroApp } from "qiankun";

export default {
  data() {
    return {
      app: null
    };
  },
  methods: {
    loadApp(loadMicroApp) {
      this.app = loadMicroApp({
        name: "openDocument", // 唯一标识
        entry: "/module/open-document/index.html",  // 访问地址
        container: "#micro",  // 挂载元素
        props: {
          documentId: '1437635360536920065'  // 传入文档集id
        }
      });
    },
  },
  mounted() {
    this.loadApp()
  },
  beforeDestroy() {
    this.app.unmount();
  }
};

4、根据需要,也可预先加载微应用

import { prefetchApps } from 'qiankun';

prefetchApps([
  { name: 'openDocument', entry: "/module/open-document/index.html" }
]);

5、主应用加载了开放文档微应用后,可能会存在样式污染问题(由于qiankun的css沙箱采用了非严格模式)。开发者可根据需要进行微调。

# 部署

1、若部署时候使用 nginx 代理,建议增加以下配置:

server {
    gzip on; 
    gzip_static on; 
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 5;
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;  
    location ^~ /module/ {
        add_header Access-Control-Allow-Origin *;
        proxy_pass https://demo.fizzgate.com/module/;
    }
    location ^~ /api {
        rewrite ^/api/(.*) /$1 break;
        proxy_pass https://demo.fizzgate.com;
    }
}

2、修改完配置后,重启 nginx 便可。