57.vue3+cli配置svg

150 阅读1分钟

上一章更新了vite的,这一章顺便更新一下cli的吧.

安装依赖

安装svg-sprite-loader 为防报错 装一个core-js

yarn add svg-sprite-loader core-js

配置vue.confg.js

module.exports = {
  chainWebpack: (config) => {
    config.module.rules.delete('svg'); //重点:删除默认配置中处理svg,
    config.module
      .rule('svg-sprite-loader')
      .test(/\.svg$/)
      .include.add(resolve('src/assets/icons/svg')) //处理svg目录
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      });
  }
}

配置组件

在svg.vue中

<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>

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

配置js文件

const requireAll = (requireContext) =>
  requireContext.keys().map(requireContext);
const req = require.context('@/assets/icons/svg', false, /\.svg$/);
requireAll(req);

全局注册并使用

import '@/components/svg-icon/index';

import SvgIcon from '@/components/svg-icon/index.vue'; // svg组件
const app = createApp(App);
// 全局注册组件
app.component('svg-icon', SvgIcon);
app.use(store).use(router).mount('#app');
  <svg-icon name="add" />