umijs / qiankun

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

[Bug]qiankun2.8.4 vite+vue3子应用渲染异常 #2469

Open 279zlj opened 1 year ago

279zlj commented 1 year ago

想请教一下各位大佬,子应用(vue3+vite)多页面有两个入口,基座是vue2+webpack,基座加载分别加载子应用a入口和b入口作为两个子应用 现象:每次挂载现象还不确定,只挂载了一个b入口的子应用或者两个都无法挂载上,wanring:single-spa minified message #41、#21、#1,这个问题的原因是什么,能怎么解决?

image

gongshun commented 1 year ago

vite-plugin-qiankun 插件问题,不支持同时挂载多个子应用,除非使用 setTimeout

https://github.com/tengmaoqing/vite-plugin-qiankun/issues/17

https://github.com/tengmaoqing/vite-plugin-qiankun/issues/35

https://github.com/tengmaoqing/vite-plugin-qiankun/issues/27

thgames908 commented 1 year ago

我也是 基座是vue2+webpack,子应用(vue3+vite), 但是我子应用 图片找不到 .....

wqhui commented 1 year ago

发现另外一个插件,在开发环境验证可以 vite-plugin-legacy-qiankun

279zlj commented 1 year ago

发现另外一个插件,在开发环境验证可以 vite-plugin-legacy-qiankun

这个也不行,它生产的html是用systemjs去加载js, 用这个插件两个入口作为子组件同时加载,前一个加载的js会被后一个js影响,前一个入口还没执行System.register就被打断了,报错(SystemJS https://github.com/systemjs/systemjs/blob/main/docs/errors.md#2) at eval (polyfills-legacy-93a2bb93.js:1:100613),只能加载后一个入口

wqhui commented 1 year ago

发现另外一个插件,在开发环境验证可以 vite-plugin-legacy-qiankun

这个也不行,它生产的html是用systemjs去加载js, 用这个插件两个入口作为子组件同时加载,前一个加载的js会被后一个js影响,前一个入口还没执行System.register就被打断了,报错(SystemJS https://github.com/systemjs/systemjs/blob/main/docs/errors.md#2) at eval (polyfills-legacy-93a2bb93.js:1:100613),只能加载后一个入口

我建了一个简单的项目:https://github.com/wqhui/qiankun-example,dev正常,preview确实有坑,再研究一下

aceHubert commented 2 months ago

发现另外一个插件,在开发环境验证可以 vite-plugin-legacy-qiankun

这个也不行,它生产的html是用systemjs去加载js, 用这个插件两个入口作为子组件同时加载,前一个加载的js会被后一个js影响,前一个入口还没执行System.register就被打断了,报错(SystemJS https://github.com/systemjs/systemjs/blob/main/docs/errors.md#2) at eval (polyfills-legacy-93a2bb93.js:1:100613),只能加载后一个入口

这个还有个问题 systemjs 是通过 polyfills 加载的,qiankun 把 System 对象当成 white list 放到了 global 上了,inactive 里重置了 System, 离开子应用再进来因为 sandbox 不会再执行 polyfills.js 了导致 System 对象丢了