命名空间
适用场景
当你的业务项目已经存在其他 UI 库,或者主应用里还有一套 element-ui / element-plus 样式时,默认的 .el-*、.y-*、--el-*、--y-* 可能发生冲突。
这时可以把 yun-elp 和 Element Plus 一起切换到自定义 namespace。
先看结论
- 预编译
css成品包只支持默认前缀:Element Plus 为el,yun-elp 为y - 只有
scss源码接入模式支持自定义 namespace elpConfig.namespace控制 Element Plus 的类名和 CSS 变量前缀yNamespace控制 yun-elp 的类名和 CSS 变量前缀- 宿主项目自己的 Element Plus 组件,也必须使用同一套 Element Plus namespace
接入方式
1. 设置 YAppWrap
vue
<script setup lang="ts">
import { ref } from 'vue';
const locale = ref<'zh-cn' | 'en' | 'ja' | 'ar'>('zh-cn');
const elementNamespace = 'ep';
const yNamespace = 'yp';
</script>
<template>
<y-app-wrap
:locale="locale"
direction="auto"
:elp-config="{ namespace: elementNamespace }"
:y-namespace="yNamespace">
<router-view />
</y-app-wrap>
</template>YAppWrap 内部已经封装了 el-config-provider。如果你的 Element Plus 组件都位于 YAppWrap 内部,这种写法就够了,不需要额外再包一层外部 el-config-provider。
2. 在 Sass 编译期注入 namespace
ts
import { defineConfig } from 'vite';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import { YunElpResolver } from 'yun-elp/resolver';
export default defineConfig({
plugins: [
Components({
resolvers: [
ElementPlusResolver({ importStyle: 'sass' }),
YunElpResolver({ importStyle: 'scss', importElementStyle: 'sass' })
]
})
],
css: {
preprocessorOptions: {
scss: {
additionalData: `
@use "element-plus/theme-chalk/src/mixins/config.scss" as element-config with ($namespace: "ep");
@use "yun-elp/theme-chalk/src/mixins/config.scss" as yun-config with ($namespace: "yp");
`
}
}
}
});注意事项
宿主项目外层也用了 Element Plus 组件
如果你的应用壳层、布局组件或其他页面结构里,还有一些 Element Plus 组件位于 YAppWrap 之外,那么宿主项目也要额外提供一层外部 el-config-provider:
vue
<template>
<el-config-provider :locale="elLocale" :namespace="elementNamespace">
<layout-shell>
<y-app-wrap
:locale="locale"
:elp-config="{ locale: elLocale, namespace: elementNamespace }"
:y-namespace="yNamespace">
<router-view />
</y-app-wrap>
</layout-shell>
</el-config-provider>
</template>这里的外层 el-config-provider 不是给 YAppWrap 重复配置,而是为了覆盖 YAppWrap 外部的 Element Plus 组件。
