Vite 中的 Element Plus 和 Icon 图标:按需引入的最佳实践

安装

powershell 复制代码
npm i element-plus @element-plus/icons-vue
npm i -D unplugin-auto-import unplugin-vue-components unplugin-icons

修改

修改您的 vite.config.ts 文件如下:

ts 复制代码
import path from 'path'
import { defineConfig } from 'vite'
import Vue from '@vitejs/plugin-vue'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

const pathSrc = path.resolve(__dirname, 'src')

export default defineConfig({
  resolve: {
    alias: {
      '@': pathSrc,
    },
  },
  plugins: [
    Vue(),
    AutoImport({
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ['vue'],
      resolvers: [
        // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
        ElementPlusResolver(),
        // 自动导入图标组件
        IconsResolver({
          prefix: 'Icon',
        }),
      ],
      dts: path.resolve(pathSrc, 'auto-imports.d.ts')
    }),
    Components({
      resolvers: [
        // 自动注册图标组件
        IconsResolver({
          enabledCollections: ['ep']
        }),
        // 自动导入 Element Plus 组件
        ElementPlusResolver()
      ],
      dts: path.resolve(pathSrc, 'components.d.ts')
    }),
    Icons({
      autoInstall: true
    })
  ]
})

Element Plus使用

Element Plus组件和方法无需显式引入,直接使用即可。否则,可能会导致样式丢失。如果在使用方法时出现类型错误,可以尝试保存并编译项目,插件会自动将类型写入 auto-imports.d.ts 文件,从而避免错误。

Icon图标的使用

  • 在按需引入图标时,模板 <template></template>不应 使用驼峰命名,而应改为使用短横线 - 命名,并在图标名称之前加上 i-ep- 前缀。
html 复制代码
<template>
  <el-icon>
    <!-- 原来是:<CircleCheckFilled /> -->
    <i-ep-circle-check-filled />
  </el-icon>
</template>
  • 有时候,我们需要使用 v-for 来动态绑定图标。在 <script setup lang="ts"></script> 中,使用驼峰命名并加上 IconEp 前缀。请注意,这不是一个字符串,而是一个对象。在模板 <template></template> 中,使用 <component :is="item.icon" /> 进行绑定。
html 复制代码
<template>
  <el-icon v-for="item in menu" :key="item.name">
    <component :is="item.icon" />
  </el-icon>
</template>
<script setup lang="ts">
const menu = [
  {
    name: '增',
    icon: IconEpPlus
  },
  {
    name: '改',
    icon: IconEpEditPen
  },
  {
    name: '删',
    icon: IconEpDelete
  }
]
</script>

参考链接

相关推荐
OpenTiny社区32 分钟前
2025OpenTiny星光ShowTime!年度贡献者征集启动!
前端·vue.js·低代码
狗哥哥44 分钟前
从零到一:打造企业级 Vue 3 高性能表格组件的设计哲学与实践
前端·vue.js·架构
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
褪色的笔记簿1 小时前
在 Vue 项目里管理弹窗组件:用 ref 还是用 props?
前端·vue.js
一只小阿乐2 小时前
前端vue3 web端中实现拖拽功能实现列表排序
前端·vue.js·elementui·vue3·前端拖拽
AAA阿giao2 小时前
从“操纵绳子“到“指挥木偶“:Vue3 Composition API 如何彻底改变前端开发范式
开发语言·前端·javascript·vue.js·前端框架·vue3·compositionapi
专注前端30年2 小时前
在日常开发项目中Vue与React应该如何选择?
前端·vue.js·react.js
进击的野人2 小时前
Vue 组件与原型链:VueComponent 与 Vue 的关系解析
前端·vue.js·面试
馬致远2 小时前
Vue todoList案例 优化之本地存储
前端·javascript·vue.js
3秒一个大3 小时前
现代前端开发框架的工程化实践:基于 Vite 与 Vue3
vue.js