通过vite-plugin-svg-icons 使用SVG图片

前言

在我们的项目中,如果使用png、jpg类似的图片的话会导致发布时体积很大,因为打包的时候图片的体积没有被压缩,所以使用svg图片就会变得非常方便以及非常轻量,以下就介绍一下如何在vue3 + vite项目中使用全局注册svg组件。

安装

npm i vite-plugin-svg-icons -D
// 或者
yarn add vite-plugin-svg-icons -D

vite.config.js配置

import {
    defineConfig
} from 'vite'
import {
    createSvgIconsPlugin
} from 'vite-plugin-svg-icons'
import path from 'path'
export default defineConfig({
    plugins: [
        createSvgIconsPlugin({
            iconDirs: [path.resolve(process.cwd(), 'src/icons/svg')],
            symbolId: 'icon-[dir]-[name]'
        })
    ]
})

在main.js引入

import 'virtual:svg-icons-register'

注意事项:

如果报fast-glob未找到,请执行npm install fast-glob -D安装。

svgIcon组件

在src——components——svg-icon下创建index.vue文件;

当然,当中可以自行修改,如果要自定义颜色,可以将颜色等属性写在组件中即可,现在默认是继承父级字体的颜色。

  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"></use>
    <title v-if="!!title">{{title}}</title>
  </svg>
</template>

<script>
  export default {
    name: 'SvgIcon',
    props: {
      iconClass: {
        type: String,
        required: true
      },
      className: {
        type: String
      },
      title: {
        type: String,
        default: ''
      }
    },
    computed: {
      iconName() {
        return `#icon-${this.iconClass}`
      },
      svgClass() {
        if (this.className) {
          return 'svg-icon ' + this.className
        } else {
          return 'svg-icon'
        }
      }
    }
  }
</script>

<style lang="scss" scoped>
  .svg-icon {
    width: 1.1em;
    height: 1.1em;
    margin-left: 0.35em;
    margin-right: 0.35em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
  }
</style>

在vue页面中使用

注:此处icon-class的含义是在路径src ——> icons ——> svg ——> ky路径下有一个名称为arrow-go-back-line.svg的图片。

<svg-icon icon-class="ky-arrow-go-back-line" />

其他

svg图片下载推荐地址

阿里巴巴图库

ionic

remixicon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值