Vite使用svg组件

1. 增加svg组件

<template>
    <svg
        class="svg-icon"
        aria-hidden="true"
        :style="{
            width: props.size + 'px',
            height: props.size + 'px',
            color: props.color
        }"
    >
        <use :xlink:href="`#icon-${props.name}`" :fill="props.color" />
    </svg>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
/**
 * @description: svg图标组件
 * @use {*} <SvgIcon name="home" :size="14" color="red" />
 */
export default defineComponent({
    name: 'SvgIcon',
    props: {
        name: {
            type: String,
            required: true
        },
        size: {
            type: Number,
            default: 14
        },
        color: {
            type: String,
            default: '#000'
        }
    },
    setup(props) {
        return {
            props
        }
    }
})
</script>
<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: middle;
  fill: currentColor;
  overflow: hidden;
}
</style>

2. 安装插件 npm i vite-plugin-svg-icons --save-dev

3. 修改 vite.config.js 配置文件

// 配置全局加载svg图标为组件
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import path from 'path';

export default defineConfig({
  plugins: [
    vue(),
    createSvgIconsPlugin({
      // 要缓存的图标文件夹
      iconDirs: [path.resolve(__dirname, 'src/assets/svg')],
      // 执行 icon name 的格式
      symbolId: 'icon-[name]'
    })
  ]
})

4. main.ts

import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
// svg组件
import 'virtual:svg-icons-register'
import SvgIcon from './SvgIcon.vue'
app.component('SvgIcon', SvgIcon)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容