一、安裝 vite-plugin-svg-icons
? ? npm i vite-plugin-svg-icons -D
? ? // 或者
? ? yarn add vite-plugin-svg-icons -D
二、在main.js引入
import 'virtual:svg-icons-register'
三婆排、配置SVG圖片文件夾
四年局、在vite.config.js中配置
//import path,{ resolve } from 'path'
import path from 'path'
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons'
export default defineConfig((command) => {
return {
? ? plugins: [
? ? ? createSvgIconsPlugin({
? ? ? ? // 指定要緩存的文件夾
? ? ? ? iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
? ? ? ? // 指定symbolId格式
? ? ? ? symbolId: '[name]'
? ? ? })
? ? ],
}
})
五径缅、新建svg封裝組件秕豫,路徑參考:src\components\svg-icon\index.vue
<template>
? <svg :class="svgClass" aria-hidden="true">
? ? <use class="svg-use" :href="symbolId" />
? </svg>
</template>
<script>
? import { defineComponent, computed } from 'vue'
? export default defineComponent({
? ? name: 'SvgIcon',
? ? props: {
? ? ? prefix: {
? ? ? ? type: String,
? ? ? ? default: 'icon'
? ? ? },
? ? ? name: {
? ? ? ? type: String,
? ? ? ? required: true
? ? ? },
? ? ? className: {
? ? ? ? type: String,
? ? ? ? default: ''
? ? ? }
? ? },
? ? setup(props) {
? ? ? const symbolId = computed(() => `#${props.name}`)
? ? ? const svgClass = computed(() => {
? ? ? ? if (props.className) {
? ? ? ? ? return `svg-icon ${props.className}`
? ? ? ? }
? ? ? ? return 'svg-icon'
? ? ? })
? ? ? return { symbolId, svgClass }
? ? }
? })
</script>
<style scope>
? .svg-icon {
? ? vertical-align: -0.1em; /* 因icon大小被設置為和字體大小一致硕并,而span等標簽的下邊緣會和字體的基線對齊膊升,故需設置一個往下的偏移比例怎炊,來糾正視覺上的未對齊效果 */
? ? fill: currentColor; /* 定義元素的顏色,currentColor是一個變量,這個變量的值就表示當前元素的color值评肆,如果當前元素未設置color值债查,則從父元素繼承 */
? ? overflow: hidden;
? }
</style>
六、按需引入使用
<template>
? <SvgIcon name="issue"></SvgIcon>
</template>
<script setup>
import SvgIcon from "@/components/SvgIcon.vue";
</script>
七瓜挽、全局引入使用
在main.js中加入
import svgIcon from './components/svgIcon/index.vue'
createApp(App).component('svg-icon', svgIcon)