微前端(九)全局静态文件引入

比如主应用引入了字体文件
微前端(九)全局静态文件引入
子应用也引入了字体文件
微前端(九)全局静态文件引入
这样写当然没有问题,如果现在想减少请求次数,主应用引入了该文件,则子应用则可以不再引入啊。
但如果子应用去掉该引入,会出现一个问题,就是直接刷新子应用界面的时候,字体图标不会显示。

  • 解决方案1:还是上面说的 主应用和子应用引入相同的静态文件,缺点就是重复引用,无效开销。
  • 解决方案2:就是判断刷新,如果不是主应用刷新,而是刷新的子应用,则先跳转到主应用,然后再路由到子应用。
    方案1就不说了,下面介绍方案2
    第一步:在main.js里面判断刷新界面
if(window.location.href===`${location.protocol}//${location.host}/`||window.location.href==='window.location.href!==`${location.protocol}//${location.host}/`'){
  console.log("----跳转到首页");
}else{
  console.log("----跳转到首页--再到子应用")
  StorageUtils.addItem("curHref",window.location.href);
  window.location.href=`${location.protocol}//${location.host}/`;
}

第二步:在主应用入口再路由到子应用。

  mounted(): void {
          //如果点击回车 则先跳转到主应用 再定位到子应用
          setTimeout(()=>{
              if(StorageUtils.getItem("curHref")!==""&&StorageUtils.getItem("curHref")!==`${location.protocol}//${location.host}/`&&StorageUtils.getItem("curHref")!==`${location.protocol}//${location.host}`){
                  StorageUtils.removeItem("curHref");
                  let layoutsMainPage = findComponentsUpward(this, "layoutsMainPage");
                  //判断是否存在tab组件
                  if(layoutsMainPage&&layoutsMainPage[0]){
                      layoutsMainPage[0].activeMenuItem(StorageUtils.getItem("curMenuId"));
                  }
              }
          },200)
        }

这样就解决了子应用静态文件丢失的问题。就可以将重复的静态文件都移动到主应用来进行加载了。

上一篇:VRRP:Virtual Router Redundancy Protocol 虚拟路由冗余协议


下一篇:微服务--云原生 参考资料