百科狗-知识改变命运!
--

vite + vue3 + ts 安装 element-plus - vue3 项目实战

梵高1年前 (2023-11-21)阅读数 32#技术干货
文章标签组件

vite + vue3 + ts 安装 element-plus

Element Plus,一套为开发者、设计师和产品经理准备的基于 Vue 3 的桌面端组件库。是element-ui的升级版。Element Plus 可以在支持ES2018ResizeObserver的浏览器上运行。如果您确实需要支持旧版本的浏览器,请自行添加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/exampleHome

npm install element-plus


按需自动导入

首先,安装unplugin-vue-componentsunplugin-auto-import

cd /var/web/www/exampleHome

npm 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


vite + vue3 + ts 安装 element-plus - vue3 项目实战

在组件中使用范例:

 
按钮


按需自动导入功能,当我们使用 element 的标签时,无需再使用import引入需要的组件,比如使用test会自动引入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 * as ElementPlusIconsVue 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 typeof ElementPlusIconsVue]);
});

在组件中使用范例:

 


方式二:自动导入组件

使用unplugin-iconsunplugin-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,
  },
}); 

在组件中使用范例:

 
 

注意:自动导入图标,在模板中的使用方式,与全局注册的不同。需要带前缀i-ep,或者IEp


动态图标

与vue2 相配的 element ui 使用动态图片,只要使用动态 class 样式,但是现在与 vue3 相配的 Element Plus 移除了 iconfont,而是需要使用动态组件

item.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';

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)