qiankun icon indicating copy to clipboard operation
qiankun copied to clipboard

子项目单独引用 umd cdn 资源,对象无法挂载到 window 上

Open wangcheng007 opened this issue 2 years ago • 11 comments

What happens?

子项目通过 cdn 的方式引入外部依赖,子项目单独访问 window 上挂载了该依赖,通过主项目访问,则无法找到该依赖。

主项目访问控制台 window 对象打印结果。 image

子项目访问 控制台 window 对象打印结果。 image

最小可复现仓库

git clone https://github.com/wangcheng007/qiankun_cdn.git
cd qiankun_cdn
pnpm i
pnpm dev -r

// 主应用访问链接
http://localhost:3000/sub1

// 子应用访问链接
http://localhost:3001

相关环境信息

  • qiankun 版本: 2.7.5

wangcheng007 avatar Aug 30 '22 02:08 wangcheng007

设计如此,子应用的 window 是一个沙箱,子应用的全局变量会挂载到这个沙箱上,而不会挂载到 window 上(但这并不影响子应用自己读取这个全局变量,其他子应用和主应用均读取不到),你在主应用控制台打印的是真实的 window,上面没有子应用的全局变量是正常的,

gongshun avatar Aug 30 '22 10:08 gongshun

设计如此,子应用的 window 是一个沙箱,子应用的全局变量会挂载到这个沙箱上,而不会挂载到 window 上(但这并不影响子应用自己读取这个全局变量,其他子应用和主应用均读取不到),你在主应用控制台打印的是真实的 window,上面没有子应用的全局变量是正常的,

也就是说不管子应用是单独访问还是在主应用中访问都是可以获取到 挂载的对象,是这个意思吗?如果是这个意思, 改动了部分内容,在子应用 mount 的时候打印 window 对象,这个时候应该是获取到子应用沙箱环境下的 window ?那也就是可以获取到挂载在 window 对象下的内容。 image 但是实际控制台并没有打印出该内容。 image

或许是和 vite-plugin-qiankun 这个有关,没有具体去读其代码

wangcheng007 avatar Aug 31 '22 02:08 wangcheng007

在子应用上挂的脚本只能在子应用的 window 里访问到,在基座挂的脚本基座和子应用的 window 都能访问

vincenteof avatar Nov 23 '22 04:11 vincenteof

我也遇到了相同问题, 在子应用的index.html页面引入 userConfig内容: const userConfig = { apiDomain:"http://localhost:800" }; 使用方式: const service = axios.create({ baseURL: userConfig.apiDomain headers: { 'Content-Type': 'application/json;charset=UTF-8', //charset=UTF-8 } }); 单独访问子应用全局变量可以使用 qiankun加载后报错变量找不到

wanghongbin73 avatar Nov 30 '22 05:11 wanghongbin73

已找到解决办法,在定义 userConfig时如下写法: window.userConfig = { apiDomain:"http://localhost:800" };

wanghongbin73 avatar Nov 30 '22 05:11 wanghongbin73

qiankun如果能开放一些变量白名单就好了

jxh150535011 avatar Dec 13 '22 08:12 jxh150535011

已找到解决办法,在定义 userConfig时如下写法: window.userConfig = { apiDomain:"http://localhost:800" };

你好,我感觉我和你有类似问题,我这边是加载 但是报错,说在window上找不到 requirejs。请问有解决思路吗

namigongyi avatar Jul 21 '23 10:07 namigongyi

我也遇到了,子应用通过cdn引入react等,打包独立运行可以正常访问,但是通过qiankun访问时会报错,找不到react

lanxiao-fang avatar Jan 23 '24 06:01 lanxiao-fang

一样遇到了。子应用window挂载了一个三维config.独立运行的时候,没问题,通过主应用启动。window上的三维config丢失。

MrRabbit1993 avatar Mar 26 '24 06:03 MrRabbit1993

现在又解决方法了吗?各位大大

Angview avatar Jun 06 '24 07:06 Angview