Vite项目当中的SVG图标的配置及图标全局组件的封装

简介: Vite项目当中的SVG图标的配置及图标全局组件的封装

为什么要使用 SVG 图标?

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后,页面上加载的不再是图片资源,这对页面性能来说是个很大的提升,而且我们SVG文件比img要小的很多。放在项目中几乎不占用资源。

如何使用?

  1. 安装 SVG 依赖插件
pnpm install vite-plugin-svg-icons -D
  1. 在 vite.config.ts 中配置插件
import { defineConfig } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // 引入 svg 图标所需要的插件
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], // 图标的存放目录
      symbolId: 'icon-[dir]-[name]'
    })
  ],
  resolve: {
    alias: {
      "@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src
    }
  }
})

  1. main.ts 中导入
import { createApp } from 'vue'
import App from '@/App.vue'
import 'virtual:svg-icons-register' // svg 配置

console.log(import.meta.env)
createApp(App).mount('#app')

注意,如果在重新启动项目的时候有如下报错:


手动进行安装


测试使用




svg:图标外层容器节点,内部雷要与use标签结合使用

xlink:href 执行用哪一个图标,属性值务必 #icon-图标名字

use标签fill 属性性可以设置图标的颜色(如何设置失败,检查你复制的这个 svg 图标代码中是否有这个 fill 属性,如果有就将其移除掉,就可以使用了)

如果需要调整图标的大小,那么就需要在 svg 标签上添加 style 就可以了

<template>
  <div>我是App根组件</div>
 <--是特定的语法-->
 
  <svg>
    <use xlink:href="#icon-phone"></use>
  </svg>
</template>

可以看到,在项目中可以使用 SVG 图标了,但是有一点不好的就是这样用起来有点麻烦,这个时候我们就可以进行ICON图标组件的封装了,并将其注册为一个全局的组件。



component / SvgIcon / index.vue

这里是组件的一个简单封装:

<template>
  <svg :style="styleObject">
    <use :xlink:href="prefix + name" :fill="color"></use>
  </svg>
</template>

<script setup lang="ts">
import { defineProps } from 'vue';

const props = defineProps({
  prefix: {
    type: String,
    default: '#icon-'
  },
  name: String,
  color: String,
  width: {
    type: String,
    default: '16px'
  },
  height: {
    type: String,
    default: '16px'
  }
})

const styleObject = {
  width: props.width,
  height: props.height
}
</script>

<style scoped>

</style>


对于类似这样在项目中会频繁使用到的基础组件,是不是可以将其注册为全局组件呢?

此时我们可以写一个自动注册的插件

component / index.ts

/*
 * 注册整个项目的全局组件
*/
import SvgIcon from './SvgIcon/index.vue'
import { App } from 'vue'
const allGlobalComponent: any = { SvgIcon }
console.log(allGlobalComponent)
export default {
    // 默认会注入 app
    install(app: App) {
        // 注册全部的全局组件
        Object.keys(allGlobalComponent).forEach(key => {
            // 注册为全局组件
            console.log(key)
            app.component(key, allGlobalComponent[key])
        })
    }
}


如上是采用导入组件的方法,其实也可以去遍历需要注册成全局组件的文件夹里面的组件文件进行注册。

最后当插件写好后,便需要在 main.ts 中去安装一下:

import { createApp } from 'vue'
import App from '@/App.vue'

import 'virtual:svg-icons-register' // svg 配置
import globalComponent from '@/components/index.ts' // 引入自定义插件对象:注册整个项目的全局组件
import '@/styles/index.scss' // 引入全局样式

const app = createApp(App)

app.use(globalComponent) // 安装自定义插件
app.mount('#app')
目录
相关文章
|
12月前
|
XML 编解码 JavaScript
封装svg图标组件
封装svg图标组件
210 0
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
999 0
020 Umi@4 中如何实现动态菜单
|
1月前
|
Web App开发 存储 前端开发
vue2精简方式实现鼠标在方框内拖拽效果源码
vue2精简方式实现鼠标在方框内拖拽效果源码
27 3
|
2月前
|
资源调度 JavaScript 前端开发
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
这篇文章介绍了在Vue 2项目中如何通过`v-viewer`插件实现图片的预览、切换、缩放、旋转等功能,并提供了插件的安装、配置和使用方法。
332 0
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
|
2月前
|
前端开发
如何在前端项目中单独引入 ElementUI 图标以及使用
这篇文章介绍了如何在前端项目中单独引入Element UI的图标文件以及如何使用这些图标。
136 0
如何在前端项目中单独引入 ElementUI 图标以及使用
|
2月前
|
前端开发
前端ElementPlus框架中的几种图标按钮使用方式
本文介绍了如何在Element Plus前端框架中使用带有图标的按钮,包括设置按钮大小、图标大小、按钮类型以及如何为图标添加点击事件。
151 0
|
5月前
|
JavaScript
vue页面如何单独给背景色全方案
vue页面如何单独给背景色全方案
|
5月前
|
XML JavaScript 前端开发
如何在VUE项目中引入SVG图标
如何在VUE项目中引入SVG图标
149 0
|
10月前
|
前端开发 JavaScript
nvue引入图标坑
nvue引入图标坑
92 1
|
5月前
elementUI引用el-image-viewer组件全局方法预览大图
elementUI引用el-image-viewer组件全局方法预览大图