qiankun子应用样式被隔离后怎么恢复全局生效?
在用qiankun注册子应用时,发现子应用的CSS样式在主应用页面加载后完全失效了。我按照文档设置了sandbox: { styleIsolation: 'no-reset' },但控制台还是报Style isolation is enabled, some styles may not work的警告。
子应用导出的bootstrap函数是这样的:
export async function bootstrap() {
console.log('vue3 app bootstraped');
}
主应用注册代码:
import { registerMicroApps } from 'qiankun';
registerMicroApps([
{
name: 'vue3-sub-app',
entry: '//localhost:8081',
activeRule: '/vue',
container: '#subapp-container',
sandbox: {
iframe: false,
experimentalStyleIsolation: false,
styleIsolation: 'no-reset'
}
}
]);
尝试过把experimentalStyleIsolation设为true也不行,子应用的按钮样式完全没效果,页面元素就像没加任何CSS一样。
问题在于
styleIsolation和experimentalStyleIsolation这两个配置混在一起了,而且no-reset这个值在新版 qiankun 里并不总是生效。最简单的解决方案是把
experimentalStyleIsolation设为 true,把其他的样式隔离配置都删掉:如果上面不行,试试完全关闭样式隔离:
还有个常见坑:子应用的 CSS 可能根本没加载到主应用里。检查一下子应用的入口 HTML 或者 main.js,确保 CSS 文件被正确引入了。
如果用的是 webpack,在子应用的 webpack 配置里加上
publicPath: 'auto'也能解决样式资源加载问题。你先试试第一个方案,把 experimentalStyleIsolation 打开,其他配置清掉。
直接用这个配置就行:
重点是
experimentalStyleIsolation要设为true,这是告诉qiankun用实验性的样式隔离方案,它会在子应用卸载时自动清理样式。同时要把strictStyleIsolation设为false,因为严格隔离会导致样式完全被限制在shadow DOM里。另外提醒一下,你的子应用构建时记得把publicPath设置成相对路径,webpack配置里加上这行:
这样静态资源路径就不会有问题。改完记得重启项目,别问我怎么知道要重启的,调试踩坑踩出来的。