前言:本文主要介绍使用 vite2.7 创建的 vue3.2 项目中的 element-plus 组件库的自动按需引入,经测试,适用于 typescript 和 JavaScript。
0、首先是安装 element-plus
npm install element-plus --save
复制代码
1、安装自动引入组件所需要使用的两个插件
npm install -D unplugin-vue-components unplugin-auto-import
复制代码
2、在 vite.config.ts(或者 vite.config.js)文件中进行如下配置
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default {
plugins: [
// ...
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
}
复制代码
经过上面的配置后,便可以在 vue 项目中的任意的 SFC 中使用任意组件而不用再手动引入了,包括其对应的样式也不用手动引入。
但是,在我的实际使用时,却发现了一些问题,就是通过这种方式引入的“反馈组件”,如 Message 等,这些组件虽然可以正常使用,但是对应的样式却没有被自动引入,对于这种情况,我找到了两种解决方法:
第一种:手动引入相关样式文件
在 main.ts(或 main.js)中手动引入相应的反馈组件的样式文件。如,我用到了 Message 这个反馈组件,那么我就在 main.ts 文件中这样引入其对应的样式文件:
import 'element-plus/theme-chalk/el-message.css'
复制代码
但是这样显然不够方便,也不够优雅,于是我在翻阅 element-plus 官方手册时,注意到手册中提到了一个插件,于是有了下面的这种既足够方便又不失优雅的方式。
第二种:通过插件自动引入相关样式文件
在翻阅官方手册时,我注意到了一款插件:unplugin-element-plus,进入这个插件的仓库:https://github.com/element-plus/unplugin-element-plus/blob/HEAD/README.zh-CN.md,发现这个插件的功能就是为 element-plus 组件自动按需引入相应的样式文件,这就好办了:
安装该插件:
npm i unplugin-element-plus -D
复制代码
在 vite.config.ts(或 vite.config.js)文件中进行如下配置,
import ElementPlus from 'unplugin-element-plus/vite'
export default {
plugins: [
ElementPlus({
importStyle: 'css',
useSource: true
}), ],
}
复制代码
自此,element-plus 的自动引入算是真正意义上的完成了,在使用任何组件时都不用再手动引入其对应的样式文件了。此时,完整的 vite.config.ts(或 vite.config.js)如下:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ElementPlus from 'unplugin-element-plus/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 可以前往vite官网查看所有vite配置项: https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
ElementPlus({
// 引入的样式的类型,可以是css、sass、less等,
importStyle: 'css',
useSource: true
}),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
})
],
server: {
host: '0.0.0.0',
open: true // 自动打开浏览器
}
})
复制代码
评论