1.0.5 • Published 1 year ago

lofter-admin-cli v1.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

lofter-admin-cli

这个是为微前端发布cli, 可以帮助你直接发布到应用平台

最新版本

release/v1.0.2

安装

  1. package.json里添加依赖
    "lofter-admin-cli": "1.0.2"
  2. 运行 npm install 完成安装

更新版本

  1. 修改 package.json 依赖为指定版本分支
    "lofter-admin-cli": "1.0.2"
  2. 运行 npm install 完成更新

命令说明

lofter-admin-cli config

用于配置全局的用户信息

lofter-admin-cli config --set secret=xxx

lofter-admin-cli upload

用于上传新版本

lofter-admin-cli upload --config lofter-app.js

配置文件说明

module.exports = {
  /**
   * @param {number} appId - 必填
   * 子应用注册后分配的应用Id
   */
  appId: 123,

  /**
   * @param {string} secret - 可选
   * 登录应用平台后在个人页查看到的上传密钥
   * 也可以通过 lofter-admin-cli config --set secret=xxx设置到本地
   */
  secret: 'xxxxxxx',

  /**
   * @param {string} remote - 可选,一般无需添加
   * 指定上传的应用平台地址
   */
  remote: ''

  /**
   * @param {string} rootDir - 必填
   * 需上传文件根目录
   */
  rootDir: 'dist',

  /**
   * @param {string} html - 可选
   * 重要:html 和 entry 至少使用一个,否则无法正确启动该应用
   * 指定加载的html文件地址,路径相对于rootDir
   * 使用 html 模式支持webpack分包,此时 publicPath 设置为 '/' 即可
   */
  html: 'index.html',

  /**
   * @param {string[]} entry - 可选
   * 重要:html 和 entry 至少使用一个,否则无法正确启动该应用
   * 额外的入口文件,相对于rootDir, 支持 * 通配符
   * 会自动挂载到html中
   * 配置html后,一般无需再次配置 entry
   */
  entry: ['umi.css', 'umi.js'],

  /**
   * @param {string[]} excludes - 可选
   * 不需要上传的文件,相对于rootDir,可以用于减少上传的文件数量,加快上传
   */
  excludes: ['xxx.yyy'],

  /**
   * @param {string[]} includes - 可选
   * 指定需要上传的文件,相对于rootDir
   */
  includes: [],

  /**
   * @param {Object} requestRewrite - 可选
  *  客户端请求重写配置,key value形式
  *  请求url如果匹配由key生成的正则,会用value进行replace
  *  此处统一配置,可以免于修改每处请求的url
  */
  requestRewrite: {}
}

转发规则运行原理

requestRewrite工作代码

const rewriteReg = new RegExp(rewriteKey);
if (rewriteReg.test(url)) {
  newUrl = url.replace(rewriteReg, requestRewrite[rewriteKey]);
  return true;
}

整体工作原理

  1. 正常情况下,如果不配置requestRewrite,应用A配置的路由为/yyy, 发出的请求/xxx,沙箱提供的request方法都会修改url为/api/yyy/xxx,目的是把所有请求都发送到主应用的node层来处理,并且附带应用A的应用路由
  2. 此时如果在应用平台配置了转发规则,/yyy转发到1.1.1.1,则最终node层会把该应用A的所有请求都转发到1.1.1.1
  3. 如果应用B配置了requestRewrite,沙箱提供的request方法会根据配置的rewrite规则修改,而不再根据规则1修改,比如'^/aaa': '/api/bbb/aaa'规则会把所有/aaa开头的请求重写为/api/bbb/aaa
  4. 如果在这个基础上,在应用平台配置了转发规则,/bbb转发到2.2.2.2,那么最终应用B下所有/aaa开头的请求,都会转发到2.2.2.2这个地址

要点总结

  1. 只有最终发送出去以/api开头的请求,才能被node层代理到,执行应用平台的转发规则
  2. 如果不配置requestRewrite或者请求url没有命中requestRewrite中的规则,请求会被微前端沙箱自动加上/api/{应用路由}
  3. 如果请求url被配置的requestRewrite规则命中,则会以该规则为准,微前端沙箱不再进行二次处理
  4. 规则的value最好以/api开头,以获得node层转发和转发规则处理的能力,并且会在请求的header中附带用户的openId登录信息