qiankun 微前端架构下主应用与子应用跨域通信配置沙箱隔离怎么实现

文章导读
qiankun 主应用与子应用跨域部署时,跨域资源加载依赖子应用服务端配置 CORS 响应头,沙箱隔离依赖主应用 registerMicroApps 配置。两者属于不同层面,跨域解决 HTTP 请求权限,沙箱解决 JavaScript 运行时与样式污染。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

qiankun 主应用与子应用跨域部署时,跨域资源加载依赖子应用服务端配置 CORS 响应头,沙箱隔离依赖主应用 registerMicroApps 配置。两者属于不同层面,跨域解决 HTTP 请求权限,沙箱解决 JavaScript 运行时与样式污染。

先说结论:跨域通信不需要特殊沙箱配置,只需确保子应用资源允许跨域加载,主应用开启沙箱选项即可隔离运行环境。

  • 适合:主应用与子应用部署在不同域名或不同端口场景
  • 先准备:子应用服务器配置 Access-Control-Allow-Origin 响应头
  • 验收:浏览器控制台无 CORS 报错,子应用样式不影响主应用

快速处理思路

跨域问题通过 Web 服务器配置解决,沙箱问题通过 qiankun 配置项解决。先确保子应用 entry html 能跨域 fetch,再在主应用中启用 strictStyleIsolation 或 experimentalStyleIsolation。

为什么会这样

跨域加载和沙箱隔离是 qiankun 运行的两个独立环节。浏览器同源策略限制子应用 HTML 和 JS 资源的 fetch 请求,必须通过 CORS 放行;沙箱机制在资源加载完成后生效,通过 Proxy 或快照隔离全局变量,通过 CSS 规则隔离样式。

分步处理

第一步配置子应用服务器 CORS。Nginx 示例配置中添加 add_header Access-Control-Allow-Origin *;,确保主应用域名能请求子应用入口文件。

第二步主应用注册子应用。在 registerMicroApps 中配置 entry 为子应用跨域地址,activeRule 设置路由匹配规则。

第三步开启沙箱隔离。配置 sandbox 对象,设置 strictStyleIsolation 为 true 启用 ShadowDOM,或 experimentalStyleIsolation 为 true 启用样式 scoped。

第四步配置通信机制。使用 props 传递初始化数据,或调用 initGlobalState 建立全局状态通信,通信逻辑不受跨域影响。

qiankun 微前端架构下主应用与子应用跨域通信配置沙箱隔离怎么实现

怎么验证是否生效

打开浏览器开发者工具 Network 面板,检查子应用 entry 请求响应头是否包含 Access-Control-Allow-Origin。检查 Console 面板无 CORS 错误报错。检查 Elements 面板,确认子应用样式未泄露到主应用全局。

常见坑

子应用内部请求接口未配置 CORS,导致子应用加载后内部 Ajax 失败。主应用开启严格样式隔离后,子应用使用全局样式库可能失效。旧版浏览器不支持 Proxy 沙箱,需确认兼容性配置。

常见问题

子应用加载报 CORS 错误怎么办

检查子应用服务器响应头是否缺少 Access-Control-Allow-Origin。确保主应用域名在允许列表中,或直接设置为 * 测试。

沙箱开启后样式丢失怎么处理

strictStyleIsolation 使用 ShadowDOM 会隔离全局样式,建议改用 experimentalStyleIsolation 或检查子应用 CSS 选择器特异性。

主应用与子应用通信失效原因

检查 props 传递时机是否在 mount 之前,或 globalState 是否在双方都正确订阅。跨域不影响通信逻辑,只影响资源加载。

参考来源

qiankun 官方文档,子应用配置,https://qiankun.umijs.org/zh/guide/getting-started

qiankun 官方文档,沙箱机制,https://qiankun.umijs.org/zh/guide/tutorial#sandbox