qiankun
qiankun copied to clipboard
子项目单独引用 umd cdn 资源,对象无法挂载到 window 上
What happens?
子项目通过 cdn 的方式引入外部依赖,子项目单独访问 window 上挂载了该依赖,通过主项目访问,则无法找到该依赖。
主项目访问控制台 window 对象打印结果。
子项目访问 控制台 window 对象打印结果。
最小可复现仓库
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
设计如此,子应用的 window 是一个沙箱,子应用的全局变量会挂载到这个沙箱上,而不会挂载到 window 上(但这并不影响子应用自己读取这个全局变量,其他子应用和主应用均读取不到),你在主应用控制台打印的是真实的 window,上面没有子应用的全局变量是正常的,
设计如此,子应用的 window 是一个沙箱,子应用的全局变量会挂载到这个沙箱上,而不会挂载到 window 上(但这并不影响子应用自己读取这个全局变量,其他子应用和主应用均读取不到),你在主应用控制台打印的是真实的 window,上面没有子应用的全局变量是正常的,
也就是说不管子应用是单独访问还是在主应用中访问都是可以获取到 挂载的对象,是这个意思吗?如果是这个意思,
改动了部分内容,在子应用 mount 的时候打印 window 对象,这个时候应该是获取到子应用沙箱环境下的 window ?那也就是可以获取到挂载在 window 对象下的内容。
但是实际控制台并没有打印出该内容。
或许是和 vite-plugin-qiankun 这个有关,没有具体去读其代码
在子应用上挂的脚本只能在子应用的 window 里访问到,在基座挂的脚本基座和子应用的 window 都能访问
我也遇到了相同问题,
在子应用的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加载后报错变量找不到
已找到解决办法,在定义 userConfig时如下写法:
window.userConfig = { apiDomain:"http://localhost:800" };
qiankun如果能开放一些变量白名单就好了
已找到解决办法,在定义 userConfig时如下写法:
window.userConfig = { apiDomain:"http://localhost:800" };
你好,我感觉我和你有类似问题,我这边是加载 但是报错,说在window上找不到 requirejs。请问有解决思路吗
我也遇到了,子应用通过cdn引入react等,打包独立运行可以正常访问,但是通过qiankun访问时会报错,找不到react
一样遇到了。子应用window挂载了一个三维config.独立运行的时候,没问题,通过主应用启动。window上的三维config丢失。
现在又解决方法了吗?各位大大