1、安装插件依赖
npm i vite-plugin-svg-icons -D
2、vite.config.js 插件配置
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import VueDevTools from 'vite-plugin-vue-devtools'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default defineConfig({
plugins: [
vue(),
VueDevTools(),
createSvgIconsPlugin({
iconDirs: [path.resolve(process.cwd(), "src/assets/svg")],
symbolId: "icon-[dir]-[name]",
})
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
3、main.js 中引入注册
import 'virtual:svg-icons-register'
4、封装 SvgIcon 组件
<template>
<svg :width="size" :height="size">
<use :xlink:href="symbolId" :fill="color"></use>
</svg>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps({
size: {
type: Number,
default: 18,
},
color: {
type: String,
default: '#333',
},
prefix: {
type: String,
default: 'icon',
},
name: {
type: String,
default: ''
},
})
const symbolId = computed(() => `#${props.prefix}-${props.name}`)
</script>
<style lang="less" scoped></style>
5、组件使用

<template>
<div>
<svgIcon name="logo"></svgIcon>
</div>
</template>
<script setup>
import svgIcon from './components/svgIcon/index.vue'
</script>