Vue&ElementPlus 按需导入

按需导入是指只导入项目中实际使用的组件或模块,而不是导入整个库,好处是减少打包体积。

按需导入分为两种:

传统按需导入

javascript 复制代码
import { ElButton, ElInput } from 'element-plus'

export default {
    components: {
        ElButton,
        ElInput,
    }
}

优点:

  • 精确控制导入内容
  • 明确的依赖关系

缺点:

  • 需要手动维护导入列表
  • 添加新组件时需要修改代码

自动导入

自动导入是通过工具自动检测并导入使用的组件/函数,无需手动编写导入语句。

arduino 复制代码
export default {
    components: {
        ElButton,
        ElInput,
    }
}

优点:

  • 减少样板代码
  • 提高开发效率
  • 保持代码简洁

缺点:

  • 初次配置较复杂
  • 需要了解工具链
  • 可能影响代码可读性(不知道从哪里导入的)
  • 有些写法不支持自动导入

建议使用按需手动import导入,简单、无需额外配置,也能达到减少打包体积的目的。

接下来展示具体的代码实现按需自动导入。

1.初始化项目

bash 复制代码
# 创建项目
npm create vite@latest auto-import-demo
# 选择Vue和TypeScript,进入到项目目录
cd auto-import-demo
# 安装依赖
npm install

2.安装Element Plus和自动导入插件

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

3.配置vite.config.ts

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

export default defineConfig({
    plugins: [
        vue(),
        AutoImport({
            // 自动导入 vue相关函数
            import: ['vue']
            resolvers: [
                // 自动导入Element Plus组件
                ElementPlusResolver(),
                // 自动导入图标
                IconsResolver({
                    prefix: 'Icon',
                }),
            ],
            // 生成自动导入的TypeScript声明文件
            dts: 'src/auto-imports.d.ts',
        }),
        Components({
            resolvers: [
                // 自动导入Element Plus 组件
                ElementPlusResolver(),
                // 自动导入element-plus图标
                IconsResolver({
                    enabledCollections: ['ep'],
                    prefix: 'Icon',
                }),
            ],
            // 配置组件自动导入
            dts: 'src/components.d.ts',
            dirs: [
                'src/components',
                'src/views',
            ],
            deep: true,
        }),
        Icons({
            autoInstall: true,
        }),
    ],
})

4.重启服务使配置生效

5.在模版中使用

vue 复制代码
<template>
<!--  <el-input placeholder="请输入" :prefix-icon="IconEpUser"/>-->
<!--  <el-button type="primary" icon="IconEpPlus">Button</el-button>-->
    <el-button type="primary">
        <el-icon><IconEpUser /></el-icon>
    Button
    </el-button>
</template>

说明:

  • 图标组件名是IconEpUser,Icon是前缀,Ep代表Element Plus图标库,以上2点和vite.config.ts配置一致,后面是图标名(大小写敏感)
  • 使用时,模板内变量IconEpUser会被自动导入(在components.d.ts中声明为全局导入:IconEpUser: typeof import('~icons/ep/user')'default'),无需手动import
  • :prefix-icon和icon都是不支持自动导入图标,需要改为以下写法
vue 复制代码
<el-input placeholder="请输入">
    <template #prefix>
        <el-icon>
            <IconEpUser/>
        </el-icon>
    </template>
</el-input>
相关推荐
FRing0316 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
ruanno_top19 小时前
点全选,已选的被清空了:Transfer 三态复选框的三个 bug
vue.js
时间的情敌20 小时前
Cesium 加载 3D Tiles 倾斜摄影、压平、样式设置(Vue3 实战)
vue.js·3d·cesium
usdoc文档预览2 天前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
Java小卷2 天前
面向 schema 编程,轻松搞定 Element 虚拟化表格复杂应用场景
vue.js·低代码·element
仨孩子的爹2 天前
Lodop、hiprint 与 vue-print-designer:打印控件选型对比
vue.js
ruanno_top2 天前
四个 canvas 组件,在 2 倍屏上一直是糊的
vue.js
ruanno_top2 天前
一个脏数据能让整条折线消失:图表组件的四种数据契约
vue.js
FlyWIHTSKY3 天前
vue2和vue3有什么区别,用法上有哪些区别
前端·javascript·vue.js
ruanno_top3 天前
能点,但 Tab 不到:两个组件把「可操作」做了一半
vue.js