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

相关推荐
怕浪猫9 小时前
哪些软件对 Chrome DevTools Protocol 频繁使用
人工智能·架构·前端框架
星栈1 天前
Dioxus 的响应式系统:`Signal`、`Memo`、`Effect` 和异步状态到底该怎么分工
前端·前端框架
秃头网友小李3 天前
前端难点:keep-alive 缓存什么?RouterView 的 key 为什么要带 scopeId?
前端·vue.js
禅思院3 天前
路由性能优化终极指南:从懒加载漏洞到边缘渲染的架构跃迁
前端·架构·前端框架
怕浪猫3 天前
Electron 系列文章封面图
算法·架构·前端框架
星栈3 天前
Dioxus 的 `rsx!` 语法:如果你会 React,上手确实特别快
前端·前端框架
徐小夕3 天前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器
前端·vue.js·算法
星栈3 天前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
奋斗吧程序媛3 天前
补充一个小知识点:有关@click.native
前端·vue.js
英勇无比的消炎药3 天前
一行命令背后:TinyRobot CLI 如何重构 AI 对话接入的效率范式
vue.js·aigc