diff --git a/packages/core/.build/plugins/index.ts b/packages/core/.build/plugins/index.ts index fcda6e0e..58d54eef 100644 --- a/packages/core/.build/plugins/index.ts +++ b/packages/core/.build/plugins/index.ts @@ -3,18 +3,20 @@ import vue from '@vitejs/plugin-vue'; import { libInjectCss } from 'vite-plugin-lib-inject-css'; import autoImportPlugin from './autoImport'; import dtsPlugin from './dts'; +import xSenderCssLayerPlugin from './xSenderCssLayer'; // import prismjsPlugin from './prismjs' const plugins: PluginOption[] = [ vue({ script: { - propsDestructure: true, - }, + propsDestructure: true + } }) as PluginOption, // prismjsPlugin, ...autoImportPlugin, dtsPlugin as PluginOption, libInjectCss() as PluginOption, + xSenderCssLayerPlugin() as PluginOption ]; export default plugins; diff --git a/packages/core/.build/plugins/xSenderCssLayer.ts b/packages/core/.build/plugins/xSenderCssLayer.ts new file mode 100644 index 00000000..3492c199 --- /dev/null +++ b/packages/core/.build/plugins/xSenderCssLayer.ts @@ -0,0 +1,22 @@ +import type { Plugin } from 'vite'; + +/** + * 将 x-sender 的 CSS 包裹进 @layer,避免其内部的 .ant 等样式污染用户项目中 ant-design-vue 的全局样式。 + * + * @layer 内的样式优先级低于任何非 @layer 的普通样式,因此 ant-design-vue 的样式天然优先,互不干扰。 + */ +export default function xSenderCssLayerPlugin(): Plugin { + return { + name: 'vite-plugin-x-sender-css-layer', + transform(code, id) { + if (id.includes('x-sender') && id.endsWith('.css')) { + return { + code: `@layer element-plus-x-third-party { +${code} +}`, + map: null + }; + } + } + }; +}