chrome中vite+qiankun无法启动的问题
问题背景
原本能正常运行的 vite + qiankun 架构的微服务今天突然出现了如下问题:
从报错来看是因为无法加载子应用的入口 js,具体原因是因为跨域问题。
问题解决
寻找原因
先是排查子应用 js 是否能够正常返回,发现文件并没有问题,且文件返回头是有 access-control-allow-origin: * 跨域标识的。
然后测试了一下其他浏览器,发现在 firefox 下是可以运行的,但所有 chrome 内核的浏览器无法运行。初步怀疑是 chrome 内核升级了安全策略导致。
然而最神奇的一点是,在其他同事的电脑上,打开缓存的情况下刷新页面,居然有一定概率是可以成功加载子应用的!虽然这一现象暂时也没办法解释,但基本确定不是我们应用的问题,而是 chrome 内核做了什么调整。
开始调试
继续想解决办法,没办法只好根据错误提示开始断点调试。通过调试发现错误的代码出自一段 dynamic import()代码:
由于 qiankun 是在沙箱中通过 eval 的方式运行这段 js,怀疑是沙箱环境的问题导致无法加载这个 js 文件。
于是又仔细观察了一下错误提示:
其中 about:blank 吸引了我的注意,为什么 base URL 会变成这个呢?
在仔细看下请求的链接地址,发现其并没有确定协议,而是以“//”开头,这样写的好处是其能自动匹配当前页面是 http 还是 https 协议。
这两点信息结合起来看的话基本上就确定问题的原因了,应该是在沙箱的环境下执行 import(‘//xxx.js’)是无法获取正确的协议导致!
那么解决方案也很简单,只要把协议写死为 https 即可,经过测试果然问题得到了解决!
chrome中vite+qiankun无法启动的问题
https://www.wobushi.top/2022/chrome中vite_qiankun无法启动的问题/