前端框架使用vue-cli( 第二层:工程配置层--elementui需要做的基础配置)

这篇文章的主题主要是两件事

1.对elementui这个技术栈做一个沉淀

2.对于vue-cli这个技术栈需要对elementui做的配置

1.对elementui这个技术栈做一个沉淀

1.什么是elementui,用通俗的语言,解释一下他主要解决什么问题

2.对于elementui在引入到工程的时候需要做什么配置

3.elementui的知识体系是什么,提供了哪些机制供使用

4.elementui实现的底层原理

Element-UI 技术沉淀

文档说明:本文对 Element-UI 技术栈进行系统性的知识沉淀,涵盖从概念认知、工程配置到源码原理的完整知识体系。


一、什么是 Element-UI?

1.1 通俗理解

Element-UI 可以理解为一套"乐高积木"------它提供了一系列开箱即用的界面组件(按钮、输入框、表格、弹窗等),开发者只需要像搭积木一样把这些组件组合起来,就能快速搭建出一个界面美观、功能完整的网页应用。

它主要解决什么问题?

在没有这类组件库之前,前端开发者做一个后台管理系统,需要从零开始写 HTML 结构、写 CSS 样式、写 JavaScript 交互逻辑。做一个表格可能要花一两天,做一个日期选择器可能要研究半天。Element-UI 将这些高频使用的界面元素预置好,开发者只需要写一行 <el-table> 就能得到一个功能完整的表格(自带排序、筛选、分页)。

1.2 官方定义

Element-UI 是由饿了么前端团队于 2016 年开源的一款基于 Vue 2.0 的桌面端 UI 组件库,旨在为开发者、设计师和产品经理提供一套完整、统一、美观的 UI 解决方案。

1.3 核心价值

维度 说明
开发效率 几行代码实现复杂功能,无需重复造轮子
设计统一 提供完整的色彩/字体/间距规范,保证界面一致性
响应式布局 基于 24 列栅格系统,适配不同屏幕尺寸
生态成熟 详尽文档、活跃社区、丰富的第三方扩展

二、Element-UI 的工程配置

2.1 安装

bash 复制代码
npm install element-ui --save

2.2 完整引入(适用于快速原型)

main.js 中全量引入:

javascript 复制代码
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

特点:配置简单,但打包体积较大(全量约 1.5MB),影响首屏加载速度。

2.3 按需引入(性能优化推荐)

第 1 步:安装 babel-plugin-component

bash 复制代码
npm install babel-plugin-component --save-dev

第 2 步:配置 babel.config.js

javascript 复制代码
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: [
    [
      'component',
      {
        libraryName: 'element-ui',
        styleLibraryName: 'theme-chalk'
      }
    ]
  ]
};

第 3 步:在需要使用的地方单独引入组件

javascript 复制代码
import { Button, Select, Input } from 'element-ui';

export default {
  components: {
    'el-button': Button,
    'el-select': Select,
    'el-input': Input
  }
}

通过这种方式,只有实际使用的组件会被打包,显著减小最终体积。

2.4 Vue CLI 插件方式(自动化配置)

如果使用 Vue CLI 3+,可以通过插件一键配置:

bash 复制代码
vue add element

命令行会弹出交互式选项,选择「完全引入」或「按需引入」,插件会自动完成所有配置。


三、Element-UI 的知识体系

3.1 组件分类

Element-UI 提供了 60+ 组件,主要分为以下几大类:

分类 核心组件 说明
基础组件 Button、Icon、Link 最基础的 UI 元素
布局组件 Container、Row、Col 页面结构搭建,24 列栅格系统
表单组件 Input、Select、Radio、Checkbox、DatePicker、Form 数据收集与验证
数据展示 Table、Tag、Progress、Tree、Pagination 数据呈现与组织
导航组件 Menu、Tabs、Breadcrumb、Dropdown 页面路由与层级
反馈组件 Dialog、Message、Notification、Popover 用户交互反馈
其他 Upload、Carousel、InfiniteScroll 特殊功能组件

3.2 核心机制

(1)栅格系统

基于 24 列的布局系统,通过 spanoffset 控制列宽与偏移,支持响应式断点(xs/sm/md/lg/xl)。

html 复制代码
<el-row :gutter="20">
  <el-col :span="12">左侧</el-col>
  <el-col :span="12">右侧</el-col>
</el-row>
(2)表单验证

内置表单验证机制,支持必填、格式校验、自定义校验规则。

html 复制代码
<el-form :model="form" :rules="rules">
  <el-form-item label="邮箱" prop="email">
    <el-input v-model="form.email"></el-input>
  </el-form-item>
</el-form>
(3)全局配置

通过 Vue.use(ElementUI, { size: 'small', zIndex: 3000 }) 可以设置全局默认属性。

(4)主题定制

支持通过修改 SCSS 变量或使用在线主题生成器进行样式定制。


四、Element-UI 的底层原理

4.1 整体架构

Element-UI 的源码组织遵循「组件独立 + 统一导出」的模块化设计:

复制代码
element-ui/
├── packages/           # 独立组件目录
│   ├── button/
│   │   ├── src/        # 组件源码
│   │   └── index.js    # 组件导出入口
│   └── ...
├── src/
│   └── index.js        # 全局入口文件
└── theme-chalk/        # 样式文件(SCSS)

4.2 组件的可插拔设计

每个组件都是一个独立的 Vue 插件,具备 install 方法:

javascript 复制代码
// packages/button/index.js
import Button from './src/main';

Button.install = function(Vue) {
  Vue.component(Button.name, Button);
};

export default Button;

这样做的好处是:组件既可以单独注册(Vue.use(Button)),也可以被插件系统统一收集后批量注册。

4.3 插件注册机制

全局入口文件 src/index.js 的核心逻辑:

javascript 复制代码
const components = [Button, Input, Table, /** ...所有组件 */];

const install = function(Vue) {
  components.forEach(component => {
    Vue.component(component.name, component);
  });
};

// CDN 自动安装
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue);
}

export default {
  install,
  ...components
};

这种设计使得 Element-UI 同时支持 Vue.use(ElementUI) 的插件方式引入,也支持通过 <script> 标签的 CDN 方式直接使用。

4.4 按需引入的原理(Tree Shaking + Babel 插件)

按需引入的实现依赖两个层面:

(1)构建层面的 Tree Shaking

通过 package.json 中的 sideEffects 字段告诉 Webpack 哪些文件有副作用(如 CSS 文件),未被使用的组件代码会被摇掉:

json 复制代码
{
  "sideEffects": ["**/*.css"]
}

(2)Babel 编译时的路径转换

babel-plugin-component 插件会将:

javascript 复制代码
import { Button } from 'element-ui'

自动转换为:

javascript 复制代码
import Button from 'element-ui/packages/button'
import 'element-ui/theme-chalk/button.css'

这个转换通过解析 AST(抽象语法树)实现,对开发者完全透明。

4.5 样式系统的组织

Element-UI 的样式基于 SCSS 编写,每个组件对应独立的样式文件:

复制代码
theme-chalk/
├── index.css           # 全量样式
├── button.css          # 按钮样式
├── input.css           # 输入框样式
└── ...

样式变量集中管理在 common/var.scss 中,通过修改这些变量即可实现主题定制。


补充说明:Element-UI 与 Vue CLI 的配合

在 Vue CLI 创建的项目中使用 Element-UI,推荐配置如下:

  1. 开发环境:使用完整引入,开发效率高
  2. 生产构建:启用按需引入 + 样式分离

如果是 Vue CLI 3+ 项目,最简配置方式就是执行 vue add element,它会自动处理 babel 配置、样式引入等所有细节。

版本提醒 :Element-UI 是基于 Vue 2.x 的版本。如果项目使用的是 Vue 3,需要选用官方升级版 Element Plus

相关推荐
invicinble1 小时前
前端框架使用vue-cli( 第二层:工程配置层--技术栈配置层配置)
javascript·vue.js·前端框架
invicinble2 小时前
前端框架使用vue-cli( 第四层:业务源码层--登陆页相关)
前端·vue.js·前端框架
Rooting++2 小时前
vue2强制刷新路由的办法
前端·javascript·vue.js
invicinble2 小时前
前端框架使用vue-cli( 第二层:工程配置层--vue语法系列)
前端·vue.js·前端框架
_waylau2 小时前
“Java+AI全栈工程师”问答01:Spring MVC登录页面错误提示
java·开发语言·vue.js·后端·spring·mvc·springcloud
兄弟加油,别颓废了。2 小时前
[特殊字符] SDN 可视化管理平台完整搭建教程(Vue + Flask + MySQL)
vue.js·mysql·flask
xuankuxiaoyao13 小时前
Vue.js实践-组件基础下
前端·javascript·vue.js
心连欣16 小时前
从零开始,学习所有指令!
前端·javascript·vue.js
LIO18 小时前
一文读懂 Vue 3:核心特性、组合式 API 与最佳实践
前端·vue.js