umijs / qiankun

📦 🚀 Blazing fast, simple and complete solution for micro frontends.
https://qiankun.umijs.org
MIT License
15.58k stars 2k forks source link

[Bug]在接入微服务界面刷新后,访问其他主应用路由,css不会被加载 #1730

Open soulxy opened 2 years ago

soulxy commented 2 years ago

提问之前强烈建立您能先阅读一下《如何正确的提出一个 Issue》

What happens?

复现步骤:

  1. 访问接入微服务的路由,F5刷新
  2. 访问其他主应用路由,component的css没有被加载
  3. 访问接入微服务的路由,不刷新
  4. 访问其他主应用路由正常

最小可复现仓库

为节约大家的时间,无复现步骤的 ISSUE 会被关闭,提供之后再 REOPEN

内网无法发代码仓,大致如下:

  1. 主应用利用ng new angular12.0.3工程,参考官网例子写的微服务注册

    <!-- app.component.html -->
    <nav class="crumbs">
    <ol>
      <!-- routerLink方式重定向,css未加载 -->
      <li class="crumb" [routerLink]="['/home']" routerLinkActive="router-link-active">
        HOME
      </li>
      <!-- a.href方式重定向,css ok -->
      <li class="crumb">
        <a href="/home">HOME2</a>
      </li>
      <li class="crumb" [routerLink]="['/resource/time-settings']" routerLinkActive="router-link-active">
        TIME-微服务
      </li>
    </ol>
    </nav>
  2. 微服务利用qiankun-ng9写的

复现步骤,错误日志以及相关配置

相关环境信息

soulxy commented 2 years ago

此严重问题有没有人关注下,是否是qiankun问题,严重影响上线了

genffy commented 2 years ago

此严重问题有没有人关注下,是否是qiankun问题,严重影响上线了

提供一个最小可复现问题的demo,这样方便对此问题有兴趣的人直接debug查问题。

soulxy commented 2 years ago

此严重问题有没有人关注下,是否是qiankun问题,严重影响上线了

提供一个最小可复现问题的demo,这样方便对此问题有兴趣的人直接debug查问题。

抱歉才看到,因为公司和谐了github没法上传,晚点再补齐下demo,按上面的例子是必现的问题 我大致定位了下找到问题,但不知道怎么修改

复现步骤: 访问接入微服务的路由,F5刷新 访问其他主应用路由,component的css没有被加载 访问接入微服务的路由,不刷新 访问其他主应用路由正常

styles、styleUrls写的样式在运行时会动态追加到head,但是在微服务刷新后在进入主应用的路由期间,在追加style时,追加到了微服务的head里,导致再真正重定向到主应用时找不到css资源。

skytt commented 2 years ago

和 #578 是同一个问题吧,同样遇到了……

zwlijun commented 2 years ago

同样的问题,请问有解决了朋友吗? qiankun版本: 2.5.1

应用场景: 主应用使用的是异步路由加载;在子应用页面刷新后,切回主应用页面,样式丢失。

hairgc commented 2 years ago

同样的问题,请问有解决了朋友吗?

qiankun版本: 2.5.1 应用场景: 主应用使用的是异步路由加载;在子应用页面刷新后,切回主应用页面,样式丢失。

我降版本到2.4.0就没问题了,你可以试试

soulxy commented 2 years ago

更新下最后的处理 之所有css会写到微服务的head里使用为qiankun重写了HTMLHeadElement.prototype.appendChild导致没法追加到主应用的head里,只要先缓存一份原始值,切换路由根据条件重新给HTMLHeadElement.prototype.appendChild赋值就好了

建议,css失效和处理方式应该官方输出文档说明和统一处理方式比较好。

zwlijun commented 2 years ago

同样的问题,请问有解决了朋友吗?

qiankun版本: 2.5.1 应用场景: 主应用使用的是异步路由加载;在子应用页面刷新后,切回主应用页面,样式丢失。

我降版本到2.4.0就没问题了,你可以试试

把主应用的路由改成同步加载后解决了这个问题

AprilLemon commented 2 years ago

确实,qiankun新版本对于,vue路由的懒加载有点问题

vincenteof commented 2 years ago

更新下最后的处理 之所有css会写到微服务的head里使用为qiankun重写了HTMLHeadElement.prototype.appendChild导致没法追加到主应用的head里,只要先缓存一份原始值,切换路由根据条件重新给HTMLHeadElement.prototype.appendChild赋值就好了

建议,css失效和处理方式应该官方输出文档说明和统一处理方式比较好。

更新下最后的处理 之所有css会写到微服务的head里使用为qiankun重写了HTMLHeadElement.prototype.appendChild导致没法追加到主应用的head里,只要先缓存一份原始值,切换路由根据条件重新给HTMLHeadElement.prototype.appendChild赋值就好了

建议,css失效和处理方式应该官方输出文档说明和统一处理方式比较好。

老铁解决了没,怎么动态赋值啊?子应用激活状态下 createElement 和 appendChild 都是被劫持过的了...