美文网首页
SVG动态引入和组件封装

SVG动态引入和组件封装

作者: 风凌摆渡人 | 来源:发表于2023-05-10 18:31 被阅读0次

背景:

svg引入大量的项目不使用的图标,所以修改为单个引入,然后通过下载单独的svg通过打包的形式优化

环境

安装插件

npm i svg-sprite-loader -D

配置vue.config.js

  1. 全局svg配置
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  chainWebpack: (config) => {
    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    // 添加要替换的 loader
    svgRule.use('svg-sprite-loader').loader('svg-sprite-loader').options({ symbolId: 'icon-[name]' })
  },
  transpileDependencies: true,
  devServer: {
    port: 8080, // 设置每次打开本地的端口号
    headers: {
      'Access-Control-Allow-Origin': '*' // 设置允许跨域请求,否则会因为在其他端口号获取资源报错
    }
  }
})

  1. 配置指定文件夹
const { defineConfig } = require('@vue/cli-service')

module.exports = defineConfig({
  chainWebpack: (config) => {
    // 内置的svg处理排除指定目录下的文件
    // eslint-disable-next-line no-undef
    config.module.rule('svg').exclude.add(resolve('src/assets/svg')).end()
    config.module
      .rule('svg-sprite-loader')
      .test(/\.svg$/)
      // eslint-disable-next-line no-undef
      .include.add(resolve('src/assets/svg'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
  },
  transpileDependencies: true,
  devServer: {
    port: 8080, // 设置每次打开本地的端口号
    headers: {
      'Access-Control-Allow-Origin': '*' // 设置允许跨域请求,否则会因为在其他端口号获取资源报错
    }
  }
})

开发公共组件

<template>
  <svg class="svg-icon"  v-on="attrs">
    <use :xlink:href="`#icon-${props.name}`" />
  </svg>
</template>

<script setup lang="ts">
  import { defineProps, useAttrs } from 'vue'
  interface ITIcon{
    name: string
  }

  const props = defineProps<ITIcon>()
  const attrs = useAttrs()
</script>

<style scoped lang="scss">
  .svg-icon {
    display: inline-block;
    width: 1em;
    height: 1em;
    overflow: hidden;
    vertical-align: -0.15em;
    fill: currentColor;
  }
</style>

导入全部svg到全局

创建index.ts 通过require.context导入全量的svg

export default function importAllSvgIcons () {
  try {
    const request: __WebpackModuleApi.RequireContext = require.context('../../assets/svg', false, /\.svg$/)
    request.keys().forEach(request)
  } catch (err) {
    console.log(err)
  }
}

相关文章

  • vue-cli3使用svg的最佳实践

    目录 iconfont的三种使用方式及其优缺点 封装svg组件 svg雪碧图 自动导入svg图标 封装svg组件 ...

  • 最佳实践React性能优化

    1: React.lazy和React.Suspense封装dynamic函数动态引入组件 1:基本使用 2:la...

  • vite+vue3.0+ts配置单个使用svg图标

    1、安装 2、在vite.config.ts中 3、封装一个svg组件 4、使用 ①、使用时,如果想按需引入 ②、...

  • 封装svg组件

    svg图标的使用基于这次项目的图标使用本地的svg图片。普通的使用方式 避免每次写这三行代码,封装一个svg组件 ...

  • svg组件封装

    svg图片的优点 1,任意放缩。 用户可以任意缩放图像显示,而不会破坏图像的清晰度、细节等。2,文本独立。 SVG...

  • svg封装组件

    1、viewport与viewBox viewBox的默认大小为20px*20px,用法如下: viewBox其实...

  • vue-quill-editor 使用记

    安装 引入 封装组件 使用组件 局部使用

  • vue component

    组件引入的2种方法: :is=“com-a” (优点:可以动态引入) 父组件和子组...

  • vite-plugin-svg-icons插件封装SvgIcon

    通过 vite-plugin-svg-icons 插件封装SvgIcon组件 配置 vite.config.ts ...

  • React Router学习笔记

    容易忘记的骚操作 组件懒加载(动态引入组件) 需要用到babel的动态引入插件@babel/plugin-synt...

网友评论

      本文标题:SVG动态引入和组件封装

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