[project]element-ui 按需加载自定义主题姿势

简介: [project]element-ui 按需加载自定义主题姿势

按需引入组件库

  1. 安装依赖
    npm install babel-plugin-component -D
  2. 配置.babelrc
{
  "presets": [["es2015", { "modules": false }]],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}
  1. main.js中按需引入
import { Button, Select } from 'element-ui';
Vue.use(Button);
Vue.use(Select);

自定义主题配置

element ui 给出了两种方案:

  1. 项目中使用了 SCSS,使用 SCSS 替换变量改变主题色
  2. 使用命令行主题工具配置生成自定义主题 css 文件

当前项目中用到了 SCSS,使用第一种方案。

  • 新建 element-variables.scss 文件
/* 改变主题色变量 */
$--color-primary: red;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";
  • 在项目入口引入样式文件
import Element from 'element-ui';
import './element-variables.scss';
Vue.use(Element);
  • 效果
    result
    通过scss变量重新赋值覆盖!default变量修改主题色。
    var.scss
  • build
    查看打包结果,发现 elementui 完整样式被打包进 app.css 里了,打包后大小为 1.18m, css 大小为 268kb。
    build

    app.css 与 vendors.css 都打包了 elementui 样式,app.css 打包了完整 elementui 样式,vendors.css 打包了按需载入组件的样式。
    app.css 与 vendors.css都打包了elementui样式

    既然 app.css 打包了完整的 elementui 样式,那么 vendors.css 的样式就可以去掉了。

    修改.babelrc配置

    [
      'component',
      {
        libraryName: 'element-ui',
        // styleLibraryName: 'theme-chalk', // 移除
        style: false, // 添加
      },
      'element-ui',
    ],

打包后 vendors.css 文件里的 elementui 的样式被移除掉了,css 文件大小由 268kb 减小为 229 kb。

打包文件还是太大,尝试使用第二种方案。

  • 安装命令行主题工具
yarn add element-theme --save
yarn add element-theme-chalk --dev
tips: glup 脚本依赖低版本 node,建议版本切换为 10.18.0
  • 生成初始化 scss 变量(项目中已生成可以跳过这步)
node_modules/.bin/et -i ./src/styles/element-variables.scss
  • 添加编译文件
    theme-build.js
const et = require('element-theme');
// 编译
et.run({
  config: './src/styles/element-variables.scss', // 配置参数文件路径 默认`./element-variables.css`
  out: './src/styles/element-theme', // 输出目录 默认`./theme`
  minimize: false, // 压缩文件
  browsers: ['ie > 9', 'last 2 versions'], // 浏览器支持
});

theme-watch.js

const et = require('element-theme');
// 实时编译模式
et.watch({
  config: './src/styles/element-variables.scss', // 配置参数文件路径 默认`./element-variables.css`
  out: './src/styles/element-theme', // 输出目录 默认`./theme`
});
  • 配置 package.json 脚本
  "scripts": {
    "element-theme-build": "node scripts/element-ui/theme-build.js",
    "element-theme-watch": "node scripts/element-ui/theme-watch.js"
  },
  • 修改 babel.config.js
// config plugins Array
plugins: [
  [
    "component",
    {
      libraryName: "element-ui",
      styleLibraryName: "~src/styles/element-theme", // 修改为生成的自定义目录
    },
    "element-ui",
  ],
];
  • 修改element-variables.scss文件
$--color-primary: red;
...
  • 生成自定义主题
yarn run element-theme-build
  • 查看效果

    自定义主题引入成功。
    result

  • 打包

    查看打包结果,打包后大小由 1.18m 减少为 743kb, css 大小由 268kb 减少为 34kb。
    build
    css

.End

目录
相关文章
|
2月前
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
221 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
|
4月前
|
前端开发 开发者 C#
深度解析 Uno Platform 中的 MVVM 模式:从理论到实践的全方位指南,助你轻松掌握通过 C# 与 XAML 构建高效可维护的跨平台应用秘籍
【8月更文挑战第31天】本文详细介绍如何在优秀的跨平台 UI 框架 Uno Platform 中实施 MVVM(Model-View-ViewModel)模式,通过一个简单的待办事项列表应用演示其实现过程。MVVM 模式有助于分离视图层与业务逻辑层,提升代码组织性、易测性和可维护性。Uno Platform 的数据绑定机制使视图与模型间的同步变得高效简便。文章通过构造 `TodoListViewModel` 类及其相关视图,展示了如何解耦视图与模型,实现动态数据绑定及命令处理,从而提高代码质量和开发效率。通过这一模式,开发者能更轻松地构建复杂的跨平台应用。
56 0
|
4月前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
86 0
|
5月前
|
JavaScript
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
165 5
|
5月前
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
Element UI【实战范例】下拉选择 el-select 的 change 事件传入选中值+自定义参数
763 1
|
5月前
Element UI 源码改造 —— 自定义数字输入框的实现
Element UI 源码改造 —— 自定义数字输入框的实现
180 1
|
5月前
|
JavaScript
F12控制台打印报Syntax Error: D:\project\xxxx\xxxx\若依系统\RuoYi-Vue-master\ruoyi-ui\src\views,console打印没加““
F12控制台打印报Syntax Error: D:\project\xxxx\xxxx\若依系统\RuoYi-Vue-master\ruoyi-ui\src\views,console打印没加““
|
5月前
|
数据安全/隐私保护
Element UI 密码输入框--可切换显示隐藏,自定义图标
Element UI 密码输入框--可切换显示隐藏,自定义图标
209 0
|
5月前
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
431 0
|
5月前
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题
170 0
下一篇
无影云桌面