【vue3】通过vite-plugin-svg-icons插件显示svg图标

1,141 阅读1分钟

前言

在网上搜索了很多关于在vue3中使用svg图标的资料,会有步骤不详尽的地方,所以在这边自己进行实践并记录相关的使用过程,避免大家重复搜索。该文章为JS,TS的朋友可以参考这篇

一、安装vite-plugin-svg-icons插件

通过命令行进行插件安装
yarn add vite-plugin-svg-icons -D
#or
npm i vite-plugin-svg-icons -D
#or
pnpm install vite-plugin-svg-icons -D

二、在vite.config.js文件中配置插件

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

export default defineConfig({
  plugins: [
    //svg插件-主要插入部分
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],//可能会出现‘process is not defined’报错,但并不影响
      // 指定symbolId格式
      symbolId: 'icon-[dir]-[name]'
    }),
  ],
});

三、在main.js入口文件引入注册脚本

import 'virtual:svg-icons-register'

四、创建缓存的图标文件夹(需和vite.config.js配置文件中插件地址一致)

微信截图_20230701182747.png

五、封装SvgIcon.vue组件导入进行全局引用

微信截图_20230701183821.png

  • 创建组件SvgIcon.vue
//可直接使用
<template>
  <svg aria-hidden="true">
    <use :xlink:href="symbolId" :fill="color" />
  </svg>
</template>

<script>
import { defineComponent, computed } from 'vue'

export default defineComponent({
  name: 'SvgIcon',
  props: {
    prefix: {
      type: String,
      default: 'icon',
    },
    name: {
      type: String,
      required: true,
    },
    color: {
      type: String,
      default: '#333',
    },
  },
  setup(props) {
    const symbolId = computed(() => `#${props.prefix}-${props.name}`)
    return { symbolId }
  },
})
</script>
  • 在main.js中进行组件注册
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon.vue'

const app = createApp(App)

app.use(createPinia())
app.use(router)
app.component('svg-icon', SvgIcon)//组件注册
app.mount('#app')

六、组件使用

<svg-icon name="dialogue" width="20" height="20" />

微信截图_20230701191631.png

  • 效果

微信截图_20230701191835.png

附加、图标下载与颜色修改

链接导向:[阿里巴巴矢量图标库](iconfont-阿里巴巴矢量图标库)

微信截图_20230701193147.png

  • 选择好需要的颜色后点击复制即可
  • 如需要颜色修改则需要去除svg文件中fill属性

微信截图_20230701193600.png

<svg-icon name="dialogue" width="20" height="20" color="#000" />
  • 效果(修改后刷新页面)

微信截图_20230701193857.png

链接导向:vite-plugin-svg-icons插件github中文文档 如有需要可以自行跳转