Vue3统一导入Svg图标

在项目中需要导入非常的图标,一个一个的引用非常麻烦,这个时候我们就需要一个组件统一去管理svg图标。

1.安装vite-plugin-svg-icons

npm i vite-plugin-svg-icons

2.导入依赖

vite.config.ts文件下使用

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'

//在plugins中添加
createSvgIconsPlugin({
      // 指定要缓存icon的文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icon')],
      // 指定symbolId格式
      symbolId: 'icon-[name]',
}),

3.创建组件

可以根据项目需求适当修改

<script lang="ts" setup>
  import { computed } from 'vue'
  const props = defineProps({
    name: {
      type: String,
      required: true,
    },
    color: {
      type: String,
      default: '',
    },
  })
  const iconName = computed(() => `#icon-${props.name}`)
  const svgClass = computed(() => {
    if (props.name) return `svg-icon icon-${props.name}`
    return 'svg-icon'
  })
</script>
<template>
  <svg :class="svgClass" v-bind="$attrs" :style="{ color: color }">
    <use :xlink:href="iconName"></use>
  </svg>
</template>

<style scoped>
  .svg-icon {
    width: 1em;
    height: 1em;
    vertical-align: middle;
    fill: currentColor;
    overflow: hidden;
    font-size: 18px;
    margin-right: 10px;
  }
</style>

4.全局导入

在main.ts文件下导入

import 'virtual:svg-icons-register'
import svgIcon from './components/SvgIcon/index.vue'
const app = createApp(App).component('svg-icon', svgIcon)

5.使用

参数name 只要填写icon的文件名称即可

<svg-icon name="???"></svg-icon>