vite + vue3 + ts 安装 element-plus
Element Plus,一套为开发者、设计师和产品经理准备的基于 Vue 3 的桌面端组件库。是element-ui的升级版。Element Plus 可以在支持ES2018
和ResizeObserver
的浏览器上运行。如果您确实需要支持旧版本的浏览器,请自行添加Babel
和相应的Polyfill
。
由于 Vue 3 不再支持 IE11,Element Plus 也不再支持 IE 浏览器。
中文官网:https://element-plus.gitee.io
项目网址:https://gitee.com/element-plus/element-plus
安装 Element Plus
cd /var/web/www/exampleHomenpm install element-plus
按需自动导入
首先,安装unplugin-vue-components
和unplugin-auto-import
cd /var/web/www/exampleHomenpm install unplugin-vue-components unplugin-auto-import -D
然后,在vite.config.ts中添加:
import { fileURLToPath, URL } from 'node:url'; 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 { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, }, })
Element Plush 自动导入功能,会在根目录下,生成文件auto-imports.d.ts、components.d.ts
在组件中使用范例:
<template> <div> <el-button type="success" size="small">按钮</el-button> </div> </template>
按需自动导入功能,当我们使用 element 的标签时,无需再使用import
引入需要的组件,比如使用<el-button>test</el-button>
会自动引入ElButton
组件。
还需要再去配置main.ts吗?不需要,安装完 element-plus,配置好vite.config.ts就完成了。插件会自动挂载处理。这样只配置一次,每次使用组件的时候,都会自己自动导入。
图标和普通 ui 组件不是同一个包,使用需要分别导入。
普通 ui 组件:element-plus
图标 ui 组件:@element-plus/icons-vue
配置 vue
编辑tsconfig.app.json文件中,compilerOptions选项:
"compilerOptions": { "composite": true, "lib": ["dom", "esnext"], "types": ["node", "jsdom", "vite/client", "element-plus/global"], "target": "esnext", "module": "esnext", "strict": true, "baseUrl": ".", "paths": { "@/*": ["./src/*"] } }
编辑tsconfig.vitest.json文件中,compilerOptions选项,也需要做相应的修改。
使用 Icon 图标
npm install @element-plus/icons-vue
icons 图标的使用方式,可以是自动导入图标组件,也可以采用注册全局组件的方式。两个方式选择一个即可。
方式一:注册全局组件
需要注册全局组件,才能够直接在项目里使用。编辑main.ts:
import { createApp } from 'vue' import App from './App.vue' 导入图标 import * asElementPlusIconsVue from '@element-plus/icons-vue' const app=createApp(App) 注册图标全局组件 for (const [key, component] of Object.entries(ElementPlusIconsVue )) { app.component(key, component) } app.mount('#app')
注册全局图标组件,也可以写成。
注册图标全局组件 Object.keys(ElementPlusIconsVue ).forEach((key) => { app.component(key,ElementPlusIconsVue [key as keyof typeofElementPlusIconsVue ]); });
在组件中使用范例:
<el-icon :size="20"> <edit /> </el-icon>
方式二:自动导入组件
使用unplugin-icons
和unplugin-auto-import
从 iconify 中自动导入任何图标集。
npm install unplugin-icons -D
然后,在vite.config.ts中添加:
import { fileURLToPath, URL } from 'node:url'; 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 { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; import Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ ElementPlusResolver(), // 自动导入图标组件 IconsResolver({ prefix: 'Icon', }), ], }), Components({ resolvers: [ ElementPlusResolver(), // 自动注册图标组件 IconsResolver({ enabledCollections: ['ep'], }), ], }), Icons({ autoInstall: true, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, server: { port: 4173, strictPort: true, }, });
在组件中使用范例:
<el-icon :size="20"> <i-ep-edit /> </el-icon>
<el-icon :size="20"> <IEpEdit /> </el-icon>
注意:自动导入图标,在模板中的使用方式,与全局注册的不同。需要带前缀i-ep
,或者IEp
。
动态图标
与vue2 相配的 element ui 使用动态图片,只要使用动态 class 样式,但是现在与 vue3 相配的 Element Plus 移除了 iconfont,而是需要使用动态组件。
item.icon 变量值为,下图的中的字符串 <el-icon :size="20"><Component:is ="item.icon" /></el-icon>
Message 消息提示
如果您使用unplugin-element-plus并且只使用组件 API,您需要手动导入样式。Message 消息提示,MessageBox 消息弹框。
@element-plus 虽然自动导入,能引用很多css样式,但是 ElMessage 等css样式,还是没有,所以再次引用样式表 import { ElMessage } from 'element-plus' import 'element-plus/es/components/message/style/css'
import { ElMessageBox } from 'element-plus'; import 'element-plus/dist/index.css';