美文网首页
在vue-cli3中利用svg-sprite-loader加载s

在vue-cli3中利用svg-sprite-loader加载s

作者: 喵喵同学嘛 | 来源:发表于2019-08-04 10:42 被阅读0次

    github地址 https://github.com/miaolianfen/vue-demo
    欢迎给个小星星,哈哈

    一、安装

    首先先安装svg-sprite-loader

    npm i svg-sprite-loader -D
    

    二、创建存放svg的文件夹

    在项目的src文件下创建icons/svg文件夹,此文件夹专门用来存放icons的小图标,将来会从该文件夹中读取所有的icons图标

    三. 修改规则和新增规则

    在vue-cli3中默认已经配了对svg处理的规则(见下图)

    image.png

    所以在vue.config.js里扩展webpack的配置,首先要排除file-loader对我们icons文件夹的处理,然后利用svg-sprite-loader对icons文件夹的进行专门的处理

    const path=require('path')
     // resolve定义一个绝对路径获取函数
    function resolve(dir){
        return path.join(__dirname,dir)
    }
    module.exports = {
        chainWebpack(config){
            //排除icons目录中svg文件处理
            config.module.rule('svg')
            .exclude.add(resolve('src/icons'))
            .end()
            //设置svg-sprite-loader处理icons目录中的svg
            config.module
            .rule('icons')
            .test(/\.svg$/)
            .include.add(resolve('src/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader("svg-sprite-loader")
            .options({symbolId:'icon-[name]'})
            .end()
        }
     }
    

    四. 创建svg-icon组件

     <template>
      <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
        <use :xlink:href="iconName" />
      </svg>
    </template>
    <script>
    export default {
      name: 'SvgIcon',
      props: {
        iconClass: {
          type: String,
          required: true
        },
        className: {
          type: String,
    default: '' }
      },
      computed: {
        iconName() {
          return `#icon-${this.iconClass}`
        },
        svgClass() {
          if (this.className) {
            return 'svg-icon ' + this.className
          } else {
            return 'svg-icon'
    } }
    } }
    </script>
    <style scoped>
    .svg-icon {
      width: 1em;
      height: 1em;
      vertical-align: -0.15em;
      fill: currentColor;
      overflow: hidden;
    }
    </style>
    

    五. 图标自动导入并全局引用组件

    在icons文件下下面创建index.js文件,来做上面创建的组件的全局注册和自动导入svg文件夹下面所有的svg图标

    // 全局引入SvgIcon组件
    import Vue from 'vue'
    import SvgIcon from '@/components/SvgIcon.vue'
    Vue.component('svg-icon', SvgIcon)
    
    // 设置icons/svg下面的图片自动导入
    const req = require.context('./svg', false, /\.svg$/);
    req.keys().map(req);
    

    最后不要忘了在main.js 中引用icons/index.js

    六. 使用

    使用方法如下:

    <svg-icon icon-class="home"></svg-icon>
    

    github地址 https://github.com/miaolianfen/vue-demo
    转载请作说明
    欢迎给个小星星,哈哈

    相关文章

      网友评论

          本文标题:在vue-cli3中利用svg-sprite-loader加载s

          本文链接:https://www.haomeiwen.com/subject/pguedctx.html