前端框架使用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

相关推荐
先吃饱再说32 分钟前
编写一个颜色选择器之后,我理解了 React 工程化的三层架构
react.js·前端框架·前端工程化
先吃饱再说40 分钟前
别说你懂 useEffect:从底层机制到生命周期管理,这篇全讲透了
react.js·前端框架
先吃饱再说1 小时前
从“传事件”到“只传值”:React + TypeScript 组件 Props 设计的两次进化
react.js·前端框架·前端工程化
小罗水2 小时前
第17章 后台管理端与演示支持
javascript·vue.js·ecmascript
猫猫不是喵喵.4 小时前
Vue3 中 computed 计算属性与 watch、watchEffect 监听
前端·javascript·vue.js
En^_^Joy5 小时前
Vue项目创建与入口配置全攻略
前端·vue.js·arcgis
猫猫不是喵喵.5 小时前
Vue2 的 Vuex 状态管理与 Vue3 的 Pinia 状态管理
前端·javascript·vue.js
林焱_RPAAI1 天前
影刀RPA技术深度:CSS选择器高级实战指南——伪类属性选择器与性能对比完全解析
vue.js·react.js
陳陈陳1 天前
🚀 前端流式输出革命:SSE + BFF 架构从零到一实战指南
vue.js·架构·node.js
黄泉路醉s1 天前
在Vant+Vue+TypeScript的H移动前端使用UnoCSS
前端·vue.js·typescript