vue-cli 配置 svg

发布于 2025-01-28 17:13:48 字数 2619 浏览 12 评论 0

安装

yarn add svg-sprite-loader svgo svgo-loader --dev

配置

chainWebpack: config => {
  // 删除整个 rule(会影响到其他 svg 文件的处理)
  // config.module.rules.delete("svg"); 

  // 或者新增一个 rule,这样就不会影响其他的 svg 文件了
  // const iconPath = path.resolve(__dirname, 'src/components/common/svg-icon/svg')
  // config.module.rule('svg').exclude.add(iconPath)
  // const icon = config.module.rule('svg-icon').test(/\.svg$/)
  // icon.include.add(iconPath)
  // icon.use('svg-sprite-loader')
  // ...

  const svgRule = config.module.rule('svg')
  svgRule.uses.clear() // 作用同上 delete
  svgRule
    .use('svg-sprite-loader')
    .loader('svg-sprite-loader')
    .options({symbolId: 'icon-[name]'})
    .end()
    .use('svgo-loader') // 主要是简化 svg 文件,当然你也可以引入 svg 文件时手动处理
    .loader('svgo-loader')
    .options({
      plugins: [
        {
          name: 'removeAttrs',
          params: { attrs: '(fill|stroke)' },    // 配置参考 svgo
        },
      ],
      })
    .end()
},

引入 svg 文件

将 svg 文件放置在这里 @/assets/svg/

编写组件

@/components/common/svg-icon/index.js

import Vue from 'vue'
import Icon from './icon'

const requireContext = require.context('@/assets/svg', true, /\.svg$/)
// function importAll (r) {
//   r.keys().forEach(r)
// }
// importAll(requireContext)
requireContext.keys().map(requireContext);
Vue.component('icon', Icon)

@/components/common/svg-icon/icon.vue

<template functional>
  <svg :class="`icon-${props.type}`" :style="{transform: `rotate(${props.rotate}deg)`}">
    <use :xlink:href="'#icon-' + props.type"></use>
  </svg>
</template>
<script>
export default {
  // props: { // props 可选
  //   type: {
  //     type: String,
  //     required: true,
  //   },
  //   rotate: {
  //     default: '0',
  //   },
  // },
}
</script>
<style scoped lang="scss">
svg {
  width: 1em;
  height: 1em;
  fill: currentColor;
  stroke: currentColor;
}
</style>

引入

main.js

import '@/components/common/svg-icon/index.js'

使用

*.vue

<template>
 <icon type="check"></icon>
</template>

如果 svg 文件较多,想使用懒加载的话,可以尝试使用 https://mmf-fe.github.io/svgicon/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

我不会写诗

暂无简介

文章
评论
26 人气
更多

推荐作者

alipaysp_snBf0MSZIv

文章 0 评论 0

梦断已成空

文章 0 评论 0

瞎闹

文章 0 评论 0

寄意

文章 0 评论 0

似梦非梦

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文