icestark子应用样式隔离失效怎么办?
我在用 icestark 搭微前端,主应用和子应用都用了相同的 CSS 类名,结果样式互相污染了。官方说开启 sandbox 可以隔离,但我开了也没用,子应用的样式还是影响到主应用。
我试过在 registerAppConfig 里加 sandbox: { strictStyleIsolation: true },但页面直接白屏了。现在临时用命名空间解决,但很麻烦。是不是我哪里配置错了?
.container {
padding: 16px;
background-color: #f5f5f5;
border-radius: 8px;
}
.button {
color: blue;
font-weight: bold;
}
先说白屏的原因:这个模式依赖动态给 style 标签加属性选择器来隔离,但如果你的子应用用了 CSS-in-JS 或者动态插入的 style 节点,就容易失效然后白屏。
正确的配置方式其实更简单:
在主应用的 app.tsx 或入口文件里这样配:
如果你用的是 2.x 版本,这样就能正常隔离了。
如果还是不行,检查一下你的 webpack 配置,确保 css-loader 的 modules 选项没被禁用。icestark 内部会通过重写 CSS 类名来实现隔离,这个能力依赖这个配置。
还有一种情况是子应用本身用了 CSS modules 或者其他方案导致冲突,这种时候可以试试在子应用里手动加前缀,或者直接用官方推荐的方式:让子应用用 rem 或者 em 单位,主应用用 px,这样即便类名重复也不会互相影响。
你先试试把 strictStyleIsolation 去掉,只留 sandbox: true,看看能不能跑通。