参考官网: element plus 按需自动导入

前提:需要完成 自动导入 的安装和配置,参考:vite 配置 - 自动导入

# 1. 安装 Element Plus

npm install element-plus

# 2. 安装自动导入 Icon 依赖

npm i -D unplugin-icons

# 3.vite.config.ts 配置

参考: element-plus-best-practices - vite.config.ts

// vite.config.ts
import vue from "@vitejs/plugin-vue";
import { UserConfig, ConfigEnv, loadEnv, defineConfig } from "vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";
export default ({ mode }: ConfigEnv): UserConfig => {
    return {
        plugins: [
            AutoImport({
                resolvers: [
                    // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
                    ElementPlusResolver(),
                    // 自动导入图标组件
                    IconsResolver({}),
                ]
                // 是否在 vue 模板中自动导入
                vueTemplate: true, 
                // 自动导入组件类型声明文件位置,默认根目录
                dts: path.resolve(pathSrc, 'types', 'auto-imports.d.ts') 
            }),
        	Components({ 
        		resolvers: [
        			// 自动导入 Element Plus 组件
        			ElementPlusResolver(),
            		// 自动注册图标组件
            		IconsResolver({
                        //element-plus 图标库,其他图标库 https://icon-sets.iconify.design/
                        enabledCollections: ["ep"] 
            		}),
                ],
                //  自动导入组件类型声明文件位置,默认根目录
                dts: path.resolve(pathSrc, "types", "components.d.ts"),
			}),
             Icons({
                 // 自动安装图标库
                 autoInstall: true,
             }),
         ],
	}
}

# 4. 在 main.ts 引入

注意:按需引入时,element-plus 不需要在 main.ts 中引入,插件会自动挂载处理,可以在全局直接使用

这里在 main.ts 中引入 element-plus 样式与图标

import * as ElementPlusIconsVue from '@element-plus/icons-vue'; // 引入图标
import 'element-plus/dist/index.css'; // 引入样式
//...
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component);
}

# 5. 示例代码

<!-- src/components/HelloWorld.vue -->
<div>
  <el-button type="success"><i-ep-SuccessFilled />Success</el-button>
  <el-button type="info"><i-ep-InfoFilled />Info</el-button>
  <el-button type="warning"><i-ep-WarningFilled />Warning</el-button>
  <el-button type="danger"><i-ep-WarnTriangleFilled />Danger</el-button>
</div>