一、vue2+webpack

1.npm安装依赖包

npm i svg-sprite-loader

package.json

"svg-sprite-loader": "^5.0.0"

main.js

import { registerSvgIconComp } from '@/plugins/registerSvgIcon'
registerSvgIconComp(app)

vue.config.js文件

module.exports = {publicPath: '/',// 打包输出outputDir: 'dist',
// 链式webpack配置chainWebpack: config => {// 设置 svg-sprite-loaderconfig.module.rule('svg').exclude.add(resolve('src/icons')).end()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()},}

2.组件封装

/plugins/registerSvgIcon.js

// svg-icon
import SvgIcon from '@/components/SvgIcon'const req = require.context('@/icons/svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)export function registerSvgIconComp(app) {app.component('SvgIcon', SvgIcon)
}

/components/SvgIcon

<template><view v-if="isExternalIcon" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-bind="$attrs"></view><svg v-else :class="svgClass" aria-hidden="true" v-bind="$attrs"><use :xlink:href="iconName" /></svg>
</template><script>
import { isExternal } from '@/utils/validate'
import { computed } from 'vue'export default {name: 'SvgIcon',props: {iconClass: {type: String,required: true,},className: {type: String,default: '',},},setup(props) {console.log('props.iconClass :>> ', props.iconClass)console.log('props.className', props.className)const isExternalIcon = computed(() => isExternal(props.iconClass))const iconName = computed(() => `#icon-${props.iconClass}`)const svgClass = computed(() => {if (props.className) {return 'svg-icon ' + props.className} else {return 'svg-icon'}})const styleExternalIcon = computed(() => {return {mask: `url(${props.iconClass}) no-repeat 50% 50%`,'-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`,}})return {isExternalIcon,iconName,svgClass,styleExternalIcon,}},
}
</script><style scoped>
.svg-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor;overflow: hidden;
}.svg-external-icon {background-color: currentColor;mask-size: cover !important;display: inline-block;
}
</style>

3.组件调用

 <div><svg-icon icon-class="ic-tips" /> &nbsp;验证码</div>

二、vue3+vite

1.npm安装依赖包(这是npm截止笔记时间最新包,我用的不是最新的)

npm i vite-plugin-svg-icons@0.6.0-beta.1

package.json

"vite-plugin-svg-icons": "^2.0.1"

2.main.js配置

// svg-icon
import 'vite-plugin-svg-icons/register'// 看哪个管用
// import 'virtual:svg-icons-register' // 看哪个管用
//组件全局调用
import { registerSvgIconComp } from '@/plugins/registerSvgIcon'registerSvgIconComp(app)

3.组件封装

/plugins/registerSvgIcon.js

// svg-icon
import SvgIcon from '@/components/SvgIcon'const files = import.meta.globEager('../static/icons/svg/*.svg') // viteconst modules = {}const requireAll = (files) => {for (const key in files) {if (Object.prototype.hasOwnProperty.call(files, key)) {modules[key.replace(/(\.\/|\.svg)/g, '')] = files[key].default}}
}
requireAll(files)export function registerSvgIconComp(app) {app.component('SvgIcon', SvgIcon)
}

/components/SvgIcon.vue

<template><view v-if="isExternalIcon" :style="styleExternalIcon" class="svg-external-icon svg-icon"></view><svg v-else :class="svgClass" aria-hidden="true"><use :xlink:href="iconName" /></svg>
</template><script>
import { isExternal } from '@/utils/validate'
import { computed } from 'vue'export default {name: 'SvgIcon',props: {iconClass: {type: String,required: true,},className: {type: String,default: '',},},setup(props) {const isExternalIcon = computed(() => isExternal(props.iconClass))const iconName = computed(() => `#icon-${props.iconClass}`)const svgClass = computed(() => {if (props.className) {return 'svg-icon ' + props.className} else {return 'svg-icon'}})const styleExternalIcon = computed(() => {return {mask: `url(${props.iconClass}) no-repeat 50% 50%`,'-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`,}})return {isExternalIcon,iconName,svgClass,styleExternalIcon,}},
}
</script><style scoped>
.svg-icon {width: 1em;height: 1em;vertical-align: -0.15em;fill: currentColor;overflow: hidden;
}.svg-external-icon {background-color: currentColor;mask-size: cover !important;display: inline-block;
}
</style>

4.组件调用

 <div><svg-icon icon-class="ic-tips" /> &nbsp;验证码</div>

注意:uniapp转微信小程序失败:Error: 暂不支持 v-bind=“” 用法
原因就是字面意思,只能老老实实使用props接受父组件传参,一个个再传进去。包括父组件得行内样式style,反正就是不能偷懒。

vue2+webpack/vue3+vite 封装svg组件总结笔记相关推荐

  1. webRtc播放rtsp视频流(vue2、vue3+vite+ts)

    一.下载webRtc 开发环境用的win10版本的. github上直接下载,速度感人. Releases · mpromonet/webrtc-streamer · GitHub 提供资源下载,0积 ...

  2. 【Vue3】Vue3+Vite前端在组件中直接使用svg图标icon(实现设计稿的icon解决方案)

    webpack实现 下载icon图标(svg格式) 用到的是腾讯codesign,其他平台也能进行svg图片的下载 放入项目 svg中如何控制图标颜色 如下图控制svg颜色的是fill参数,此处可以删 ...

  3. vue3+vite配置svg文件的全局使用(想怎么改颜色、宽高都可以)

    前言 1.你是否遇到UI给你切双份icon图(正常显示颜色.高亮显示颜色)?我们前端小伙伴还得做交互引入两个图片,以后修改颜色又要换?好麻烦呀~~~ 2.是否遇到有时候下载svg下来,想随意更改颜色遇 ...

  4. vue3 简单封装GoogleMap组件

    关于支持vue3的GoogleMap,暂时推荐两种 vue3-google-map vue3 google maps 大家有较好的推荐欢迎交流 我这里选用的第二种 npm install -S @fa ...

  5. vue3+TypeScript封装echarts5组件

    https://blog.csdn.net/qq_38330707/article/details/111497853 有用mark 等抽时间写个vue+TS+echarts5.0的组件文章 写个大概 ...

  6. Vue3封装通用svg组件

    我觉得拿自己以前发过的文章应该是不能叫做抄吧! 我之前在iconfont图标库找到了一些比较精美的图标,但是当我兴高采烈的拿着从阿里妈妈图标库去用的时候发现,颜色是黑的,emmmm-,当然颜色是可以修 ...

  7. echarts vue 柱状图实例_「源码学习」适用于 Vue3 的 ECharts 包装组件

    距离 Vue3 发布已经有近一周的时间,不知道大家源码都学习的怎么样了呢?今天 Gitee 为开发者们推荐一个新的学习资源,就是下面要介绍的这个同时适用于 Vue2 和 Vue3 的 EChatrts ...

  8. 基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?

    官网: NutUI - 移动端 Vue2.Vue3.小程序 组件库京东风格的轻量级移动端 Vue.React 组件库https://nutui.jd.com/#/component/form 用法: ...

  9. Vue2 环境下安装Vue3 ,同一台电脑同时安装vue2 和vue3

    目前大多数老的项目还是以vue2.0版本为主,在vue3的环境下vue2的项目又不能运行,因此Vue2 和Vue3两个版本同时存在显得尤为重要,本博客为转发博客,非常详细 博客1:https://bl ...

最新文章

  1. android 音频增益_参考级音频播放器!七彩虹发布Pocket HIFI U6:4999亲民价
  2. linux驱动:i2c驱动(三)流程图之注册设备
  3. oracle 时间小于,jquery easyui 对于开始时间小于结束时间的判断示例
  4. Ubuntu 下监控进程网络流量
  5. python颜色识别_python颜色识别
  6. RPA机器人可以为工业制造业带来什么巨变
  7. cmd下载的python包,pycharm中却无法使用
  8. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]
  9. HTML|下拉框和文本域、文件域
  10. Docker的安装以及常用的一些命令
  11. 《笑傲股市 How to Make Money in Stocks》读书笔记
  12. Unity3D安装:从命令行安装 Unity
  13. 推荐:几款优秀的数据挖掘工具
  14. 2018年春计算机教学计划,2018年春季教学计划表
  15. Java从小白到大牛第1篇 Java基础-关东升-专题视频课程
  16. 产业经济学古诺模型计算机,古诺模型概述及对多寡头垄断市场的推广研究
  17. ViewGroup源码解读
  18. 基于Python实现的钢筋数量识别
  19. 我为什么选择在大二实习?
  20. centos7 moloch安装及优化

热门文章

  1. c语言圈复杂度switch,干货|C语言switch\/case圈复杂度优化重构
  2. js中onmouseleave和onmouseout的区别详解
  3. SQL中的DDL语句
  4. 从阿里云到自建:RocketMQ迁移的注意事项
  5. golang全局变量
  6. 【ODOO】来了解一下browse方法
  7. Cannot resolve symbol 'mapper'
  8. super关键字的使用
  9. mysql导入大量数据_mysql快速导入大量数据问题
  10. mysql导入中文数据_MYSQL导入中文数据乱码的四种解决办法