安装 Element Plus


    步骤 1:安装 Element Plus

    Element Plus是一个基于 Vue 3 的组件库,我们首先需要将其安装到我们的项目中。

    1pnpm add element-plus

    步骤 2:安装开发依赖插件,实现按需自动导入

    为了更方便地使用 Element Plus 组件,我们需要安装两个插件:unplugin-vue-componentsunplugin-auto-import

    1pnpm add -D unplugin-vue-components unplugin-auto-import

    步骤 3:配置 Vite

    接下来,我们需要在项目的 Vite 配置文件中添加这两个插件,以便自动导入 Element Plus 组件。

    1import { fileURLToPath, URL } from "node:url"
    2import vue from "@vitejs/plugin-vue"
    3import AutoImport from "unplugin-auto-import/vite" // [!code focus]// [!code ++]
    4import Components from "unplugin-vue-components/vite" // [!code focus]// [!code ++]
    5import { ElementPlusResolver } from "unplugin-vue-components/resolvers" // [!code focus]// [!code ++]
    6import { defineConfig } from "vite"
    7
    8// https://vite.dev/config/
    9export default defineConfig({
    10	resolve: {
    11		alias: {
    12			"@": fileURLToPath(new URL("./src", import.meta.url)),
    13		},
    14	},
    15	plugins: [
    16		vue(),
    17		AutoImport({ // [!code focus]// [!code ++]
    18			resolvers: [ElementPlusResolver()], // [!code focus]// [!code ++]
    19		}), // [!code focus]// [!code ++]
    20		Components({ // [!code focus]// [!code ++]
    21			resolvers: [ElementPlusResolver()], // [!code focus]// [!code ++]
    22		}), // [!code focus]// [!code ++]
    23	],
    24})

    步骤 4:在组件中直接使用 Element Plus

    配置完成后,你可以直接在 Vue 组件中使用 Element Plus 提供的 UI 组件,无需手动导入。

    1<template>
    2	<el-button>Default</el-button> // [!code focus]
    3</template>

    请注意,<el-button> 是 Element Plus 中按钮组件的标签,你可以直接使用它,而不需要在脚本部分显式导入。


    步骤 5:注册所有图标

    (1)在 common/plugin 目录下新建 element-plus-icons.tsindex.ts 文件

    1import type { App } from "vue"
    2import * as ElementPlusIconsVue from "@element-plus/icons-vue"
    3
    4export function installElementPlusIcons(app: App) {
    5	// 注册所有 Element Plus Icons
    6	for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    7		app.component(key, component)
    8	}
    9}
    1import type { App } from "vue"
    2import { installElementPlusIcons } from "./element-plus-icons"
    3
    4export function installPlugins(app: App) {
    5	installElementPlusIcons(app)
    6}

    :::

    (2)在 main.ts 中引入并注册

    1// core
    2import { createApp } from "vue"
    3import { router } from "@/router"
    4import { pinia } from "@/pinia"
    5import { installPlugins } from "@/common/plugins" // [!code focus]// [!code ++]
    6import App from "./App.vue"
    7
    8// 创建应用实例
    9const app = createApp(App)
    10
    11// 安装插件 // [!code focus]// [!code ++]
    12installPlugins(app) // [!code focus]// [!code ++]
    13
    14// 挂载路由和状态管理
    15app.use(router).use(pinia)
    16
    17// router 准备就绪后挂载应用
    18router.isReady().then(() => {
    19	app.mount("#app")
    20})

    (3)使用

    1<template>
    2  <div>
    3    <Edit/> // [!code focus]// [!code ++]
    4  </div>
    5</template>

    步骤 6:自动导入icon图标配置(可选)

    为了简化 Element Plus 图标的使用并自动导入,我们可以配置 Vite 插件 unplugin-icons

    (1)安装图标库和插件

    首先,安装 Element Plus 图标库和 unplugin-icons 插件:

    1pnpm add @element-plus/icons-vue
    2pnpm add -D unplugin-icons

    (2)配置 Vite 插件

    在 Vite 配置文件中,配置自动导入 Element Plus 图标:

    1import { fileURLToPath, URL } from "node:url"
    2import vue from "@vitejs/plugin-vue"
    3import AutoImport from "unplugin-auto-import/vite"
    4import Components from "unplugin-vue-components/vite"
    5import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
    6import Icons from "unplugin-icons/vite" // [!code focus]// [!code ++]
    7import IconsResolver from "unplugin-icons/resolver" // [!code focus]// [!code ++]
    8import { defineConfig } from "vite"
    9
    10// https://vite.dev/config/
    11export default defineConfig({
    12	resolve: {
    13		alias: {
    14			"@": fileURLToPath(new URL("./src", import.meta.url)),
    15		},
    16	},
    17	plugins: [
    18		vue(),
    19		AutoImport({
    20			resolvers: [
    21				ElementPlusResolver(),
    22				// 自动导入图标组件 // [!code focus]// [!code ++]
    23				IconsResolver(), // [!code focus]// [!code ++]
    24			],
    25		}),
    26		Components({
    27			resolvers: [
    28				// 自动注册图标组件 // [!code focus]// [!code ++]
    29				IconsResolver({ // [!code focus]// [!code ++]
    30					prefix: "icon", // 使用 'icon-' 作为前缀,默认是 'i' // [!code focus]// [!code ++]
    31					enabledCollections: ["ep"], // 指定Element Plus图标库 // [!code focus]// [!code ++]
    32				}), // [!code focus]// [!code ++]
    33				ElementPlusResolver(),
    34			],
    35		}),
    36		Icons({ // [!code focus]// [!code ++]
    37			autoInstall: true, // 自动安装图标 // [!code focus]// [!code ++]
    38		}), // [!code focus]// [!code ++]
    39	],
    40})

    (3)在项目中使用图标

    配置完成后,你可以直接在 Vue 组件中使用 Element Plus 图标,格式为 {prefix}-{collection}-{icon}

    1<template>
    2  <div>
    3    <Edit/> // [!code --]
    4    <icon-ep-Edit/> // [!code ++]
    5  </div>
    6</template>

    步骤 7:定制主题色(可选)

    (1)安装 sass

    为了使用 Element Plus 的 scss 变量,您需要在项目中安装 sass:

    1pnpm add -d sass

    (2)创建自定义样式文件

    创建一个 scss 文件来定义您的自定义主题色。例如,在 common/assets/element/index.scss

    1/* 只需要重写你需要的即可 */
    2@forward 'element-plus/theme-chalk/src/common/var.scss' with (
    3  $colors: (
    4    'primary': (
    5      'base': green,
    6    ),
    7    'success': (
    8      'base': green,
    9    ),
    10    'warning': (
    11      'base': green,
    12    ),
    13    'danger': (
    14      'base': green,
    15    ),
    16    'error': (
    17      'base': green,
    18    ),
    19  ),
    20);

    (3)配置 Vite 自动导入样式

    vite.config.ts 中配置 Vite 以使用自定义的 scss 文件,并确保 Element Plus 组件样式正确导入:

    1import { fileURLToPath, URL } from "node:url"
    2import vue from "@vitejs/plugin-vue"
    3import AutoImport from "unplugin-auto-import/vite"
    4import Components from "unplugin-vue-components/vite"
    5import { ElementPlusResolver } from "unplugin-vue-components/resolvers"
    6import { defineConfig } from "vite"
    7
    8// https://vite.dev/config/
    9export default defineConfig({
    10	resolve: {
    11		alias: {
    12			"@": fileURLToPath(new URL("./src", import.meta.url)),
    13		},
    14	},
    15	css: { // [!code focus]// [!code ++]
    16		preprocessorOptions: { // [!code focus]// [!code ++]
    17			scss: { // [!code focus]// [!code ++]
    18				additionalData: `@use "@/common/assets/element/index.scss" as *;`, // [!code focus]// [!code ++]
    19			}, // [!code focus]// [!code ++]
    20		}, // [!code focus]// [!code ++]
    21	}, // [!code focus]// [!code ++]
    22	plugins: [
    23		vue(),
    24		AutoImport({
    25			resolvers: [ElementPlusResolver()],
    26		}),
    27		Components({
    28			resolvers: [
    29				ElementPlusResolver({ 
    30					importStyle: "sass", // [!code focus]// [!code ++]
    31				}),
    32			],
    33		}),
    34	],
    35})