lishaobos/vite-plugin-legacy-qiankun

两个应用来回切换报错

Opened this issue · 9 comments

index-legacy-eadb6705.js:29 Error: http://192.168.0.116:8082/CoreUI_App/assets/index-legacy-4470f73e.js (SystemJS https://github.com/systemjs/systemjs/blob/main/docs/errors.md#2)
at eval (polyfills-legacy-758f4cb6.js:1:115007)

两个子应用都是vue3 + vite
请问大佬这个要怎么解决?

能提供个 git 仓库不,我看看

能提供个 git 仓库不,我看看

一个页面里同时加载多个同名子应用就容易出现这个错误

一个页面里同时加载多个同名子应用就容易出现这个错误

如果将systemjs包改成cdn引入就没这个报错了。

一个页面里同时加载多个同名子应用就容易出现这个错误

这个同名指的是注册子应用的名称吗,还是vue实例

解决了吗,我也遇见了同样的问题

是 qiankun 的问题, qiankun 把 System 做为 global 挂载到了顶层的 window 上了,在 inactive 时会被重置,在 active 里只是激活 sandbox 但是子应用的 polyfills.js 不会被再次执行导致 System 对象不正确
https://github.com/umijs/qiankun/blob/master/src/sandbox/proxySandbox.ts#L70
https://github.com/umijs/qiankun/blob/master/src/sandbox/proxySandbox.ts#L198

是 qiankun 的问题, qiankun 把 System 做为 global 挂载到了顶层的 window 上了,在 inactive 时会被重置,在 active 里只是激活 sandbox 但是子应用的 polyfills.js 不会被再次执行导致 System 对象不正确 https://github.com/umijs/qiankun/blob/master/src/sandbox/proxySandbox.ts#L70 https://github.com/umijs/qiankun/blob/master/src/sandbox/proxySandbox.ts#L198

let subName: string | undefined,
system = window.System;
const systems = new Map<string, any>();
Object.defineProperty(window, 'System', {
  get() {
    return subName ? systems.get(subName) : system;
  },
  set(val) {
    subName ? systems.set(subName, val) : (system = val);
  },
});

在主应用里把 System 劫持,暂时解决了

一个页面里同时加载多个同名子应用就容易出现这个错误

如果将systemjs包改成cdn引入就没这个报错了。

cdn 会造成子应用逃离 sandbox 环境,js, css 全部加载到主应用上去了