乾坤中开启时使用了沙箱样式隔离,在主应用中访问子应用时ant-design-vue组件的样式全都不生效了,单独访问子应用时是正常的
技术栈使用了vue3+vite+ant-design-vue
乾坤中开启时使用了沙箱样式隔离,在主应用中访问子应用时ant-design-vue组件的样式全都不生效了,单独访问子应用时是正常的
根据你提供的信息,问题可能是由于沙箱隔离导致的。沙箱隔离的作用是将子应用的样式和组件等与主应用隔离开来,这可能会导致样式不生效的问题。下面提供一些解决方案供参考:
1、使用共享模式
可以在主应用中开启 qiankun 的共享模式,使得子应用的样式和组件等能够共享主应用的样式和组件等,从而解决样式不生效的问题。
在主应用中,通过配置 useDynamicImport 和 jsSandbox 两个属性,将 useDynamicImport 设置为 false,jsSandbox 设置为 false,以开启共享模式。例如:
// main.js
import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
{
name: 'child-app',
entry: '//localhost:8001',
container: '#container',
activeRule: '/child-app',
},
]);
start({
useDynamicImport: false,
jsSandbox: false,
});
在子应用中,则需要在 entry 的 HTML 模板中引入主应用的样式和组件等。例如,可以在 public/index.html 中引入 ant-design-vue 的样式和组件:
<!-- public/index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>child-app</title>
<link rel="stylesheet" href="//unpkg.com/ant-design-vue/dist/antd.css">
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
这样,在访问子应用时,ant-design-vue 的样式和组件等就能够正常生效了。
2、使用样式标记
另一种解决样式不生效的问题的方法是,在子应用的样式文件中加入特定的标记,来表示这些样式需要被保留。在主应用中的沙箱隔离配置中,通过 strictStyleIsolation 选项,将这些标记的样式保留下来,从而让样式能够正常生效。
在 ant-design-vue 中,可以在样式文件中使用 :global 标记来标记需要保留的样式,例如:
/* src/main.css */
:global .ant-button {
/* ant-design-vue 按钮组件的样式 */
}
在主应用中,则需要在沙箱隔离配置中,将 strictStyleIsolation 设置为 false,并将 allowedStyleRules 设置为 ['font', 'color', 'width', 'height', 'background-color', /^:global/],表示保留字体、颜色、宽度、高度、背景颜色和 :global 标记的样式。例如:
// main.js
import { registerMicroApps,