微前端子应用样式隔离失效怎么办?
我用 qiankun 搭了个微前端项目,主应用和子应用都是 Vue3。本来以为开启 sandbox 就能自动隔离样式,结果子应用的 CSS 还是污染了主应用的按钮样式。
我试过在子应用里加 scoped,但没用;也试过动态添加前缀,可维护性太差。现在一改子应用的样式,主应用的 UI 就跟着乱,真的头疼。
是不是我漏了什么配置?比如这个:
registerMicroApps([
{
name: 'app1',
entry: '//localhost:8081',
container: '#subapp-viewport',
activeRule: '/app1',
sandbox: {
strictStyleIsolation: true
}
}
])
开了 strictStyleIsolation 后页面直接白屏,控制台报 Failed to execute 'appendChild' on 'Node',这又是什么情况?
strictStyleIsolation: true这个模式根本不能用,会破坏子应用的正常渲染逻辑,直接白屏就是它干的好事。别用
strictStyleIsolation,改用experimentalStyleIsolation: true,这是 qiankun 官方推荐的、真正能用的样式隔离方案,配合子应用构建时加前缀(比如用postcss-prefixer或style-resources-loader)才靠谱。要是你子应用是 Vue3 + Vite,最省事的做法是:在
vite.config.js里加个插件自动加前缀,比如这样:主应用那边
sandbox配成experimentalStyleIsolation: true就行,别碰strict,那个就是个坑。