微前端:qiankun框架在开发中遇到的问题

基座是Vue3.0 + element plus配合 子应用 Vue2.0 + element ui导致的样式冲突问题

element-plus默认命名空间为el,el会作为其编译后的class名及css前缀。支持 自定义命名空间

首先在App.vue中定义:namespace="ep";具体代码如下:

复制代码
<template>
  <el-config-provider namespace="ep">
    <RouterView />
  </el-config-provider>
</template>

其次设置 SCSS 和 CSS 变量,创建 /src/assets/styles/element/index.scss, index.scss具体内容如下:

复制代码
@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
  $namespace: 'ep'
);

因为我使用的是 qiankun + vue3.0 + webpack,所以需要在webpack 的 preprocessorOptions 中设置。找到vite.config.js文件,

preprocessorOptions 中设置 additionalData: `@use "@/assets/styles/element/index.scss" as *;`,

具体修改内容如下:

复制代码
    css: {
      preprocessorOptions: {
        scss: {
          // 全局注入变量/混合宏(路径需根据项目调整)
          // additionalData: `@import "@/styles/variables.scss";`,
          additionalData: `@use "@/assets/styles/element/index.scss" as *;`,
          // 解决旧版 API 警告(Sass 版本兼容)
          api: 'modern-compiler',
        },
      },

到这里后,还有一点比较坑,我相信很多人也遇到了,就是配置完 依然不起作用,样式还是乱的,一步一深坑,跟着官方文档也得踩。其实答案就在你的main.js里;一般引入 element-plus 时,我们用的是

复制代码
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'; 

需要注意的是:index.css是编译压缩过的,还用这个样式就等于没了,因为我们换了前缀命名,index.css还是默认 el 的;需要改为引入 import 'element-plus/theme-chalk/src/index.scss';

main.js文件修改如下:

复制代码
//import 'element-plus/dist/index.css'
import 'element-plus/theme-chalk/src/index.scss';

然后重新启动项目就🆗,前人踩坑后人乘凉..........

相关推荐
techdashen2 分钟前
不开端口,不配 DNS,用树莓派在家搭一个公网可访问的 Web 服务
前端·网络·智能路由器
早起傻一天~G29 分钟前
vue2+element-UI表单封装
前端·vue.js·ui
pixcarp33 分钟前
Nginx实战部署与踩坑总结 附带详细配置教程
服务器·前端·后端·nginx·golang
Live&&learn41 分钟前
Vue项目打包后内联字符串不显示的原因
前端·javascript·vue.js
爱上好庆祝43 分钟前
学习js的第三天
前端·css·人工智能·学习·计算机外设·js
aq553560044 分钟前
Chrome如何重塑Web标准的未来格局
前端·chrome
宁雨桥1 小时前
深入剖析Vue2与Vue3响应式原理:从Object.defineProperty到Proxy的演进
前端·vue.js
wytraining1 小时前
SDD规范驱动开发
前端
深海鱼在掘金1 小时前
Next.js从入门到实战保姆级教程(第十四章):性能优化深度实践
前端·typescript·next.js
tiger从容淡定是人生1 小时前
Selenium与Playwright:两大Web自动化框架的深入对比
前端·selenium·测试工具·自动化·web测试·playwright·信息化战略