一、文件内容
// 核心逻辑:动态设置 Webpack 的 publicPath
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
- 作用机制:通过判断全局变量
window.__POWERED_BY_QIANKUN__
是否存在,动态修改 Webpack 的公共资源路径__webpack_public_path__
; - 适配场景:仅在子应用被 qiankun 主应用加载时生效,独立运行时保持默认路径。
二、核心作用
-
资源路径动态适配
- 解决子应用资源(JS/CSS/图片)在微前端环境下因主应用路由前缀导致的路径错误问题;
- 示例:子应用独立运行时资源路径为
/static/js/main.js
,嵌入主应用后自动调整为/subapp/static/js/main.js
。
-
生产与开发环境统一
- 避免独立部署和嵌入主应用时需分别配置
publicPath
的复杂性; - 通过运行时动态注入路径,减少构建环境差异带来的配置问题。
- 避免独立部署和嵌入主应用时需分别配置
-
多实例隔离
- 支持同一子应用同时挂载到多个主应用容器时,各实例资源路径独立隔离。
三、使用规范
-
引入时机
- 必须在子应用入口文件(如
main.js
)的最顶部引入,确保其他模块加载前已设置路径; - 示例:
- 必须在子应用入口文件(如
// main.js
import './public-path'; // 首行引入
import Vue from 'vue';
-
构建工具适配
- Webpack 项目需通过
output.publicPath
配置为'auto'
或空字符串,以启用动态路径; - Vite 项目需通过
base
配置结合环境变量实现类似效果。
- Webpack 项目需通过
四、典型问题解决
问题现象 | 原因 | 解决方案 |
---|---|---|
子应用资源加载 404 | 静态资源路径未适配主应用路由 | 检查 public-path.js 是否正确引入 |
样式/脚本跨域错误 | 资源路径未动态更新 | 确认 __webpack_public_path__ 被成功注入 |
热更新失效 | 开发环境路径冲突 | 主应用注册时添加 useDevMode: true 参数 |