vue项目引入svg组件全过程

文件格式

  • 在这里插入图片描述

svg下方对应 .svg

index.vue svg-icon 组件

<template><svg:viewBox="viewBox"xmlns="http://www.w3.org/2000/svg"xmlns:xlink="http://www.w3.org/1999/xlink"ref="svg"class="svg-icon":class="className"v-on="$listeners":style="{ width: width + 'em', height: height + 'em' }"v-html="iconContent"></svg>
</template><script>
export default {name: 'SvgIcon',props: {iconClass: {type: String,required: true},className: {type: String,default: ''},width: {type: Number,default: 1},height: {type: Number,default: 1}},data() {return {iconContent: null,viewBox: '0 0 24 24',test: ''}},watch: {iconClass() {this.loadIcon()}},created() {this.loadIcon()},methods: {loadIcon() {const fileName = `${this.iconClass}.svg`import(`@/icons/svg/${fileName}`).then((content) => {// symbol转换成svgconst regexSymbol = /<symbol(\s[\s\S]*?)?>([\s\S]*?)<\/symbol>/gconst svg = content.default.content.replace(regexSymbol, '<svg$1>$2</svg>')this.test = content// 获取svg内标签const regexSvg = /<svg([\s\S]*?)?>([\s\S]*?)<\/svg>/gconst match = regexSvg.exec(svg)this.iconContent = match[2]// 匹配svg属性const regexAttr = /<svg([\s\S]*?)?>/const matchAttr = regexAttr.exec(svg)[1].trim()const viewBoxReg = /viewBox="([^"]+)"/const viewBoxValue = viewBoxReg.exec(matchAttr)[1]this.viewBox = viewBoxValue}).catch((err)=>{console.log(err)})}}
}
</script><style scoped>
.svg-icon {/* width: 2em;height: 2em; */vertical-align: -0.15em;fill: currentColor !important;overflow: hidden;
}
</style>

index.js 注册组件

import Vue from 'vue'
// import SvgIcon from '@/components/SvgIcon' // svg组件
import SvgIcon from './index.vue' // svg组件// register globally
Vue.component('SvgIcon', SvgIcon)// const requireAll = (requireContext) => requireContext.keys().map(requireContext)
// const req = require.context('./svg', false, /\.svg$/)
// export default requireAll(req)

主要是这段

 config.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();

安装npm i svg-sprite-loader

"svg-sprite-loader": "^6.0.11",

补充 可以不看

  • vue.config.js 主要使用带svg的那一段 这是webapck5 的配置
const { defineConfig } = require("@vue/cli-service");
const speedMeasureWebpackPlugin = require("speed-measure-webpack-plugin"); // 编译速度分析
const smp = new speedMeasureWebpackPlugin();
const path = require("path");
const isProd = process.env.NODE_ENV === "production";
let plugins = [];module.exports = defineConfig({productionSourceMap: false,transpileDependencies: true,lintOnSave: false,devServer: {port: 8080,open: true,hot: true,allowedHosts: 'all',compress: true, // 是否启动压缩Gzipclient: {overlay: {errors: true,warnings: false,runtimeErrors: false}},}},configureWebpack: smp.wrap({devtool: isProd ? false : "eval", // source-map eval-cheap-module-source-mapcache: {type: "filesystem",allowCollectingMemory: true,buildDependencies: {config: [__filename],},},plugins: plugins,optimization: {minimize: isProd,splitChunks: {chunks: "all",cacheGroups: {common: {name: "chunk-common",chunks: "initial",minChunks: 2,maxInitialRequests: 5,minSize: 0,priority: 1,reuseExistingChunk: true,enforce: true,},vendors: {name: "chunk-vendors",test: /[\\/]node_modules[\\/]/,chunks: "initial",priority: 2,reuseExistingChunk: true,enforce: true,},elementUI: {name: "chunk-elementui",test: /[\\/]node_modules[\\/]element-ui[\\/]/,chunks: "all",priority: 3,reuseExistingChunk: true,enforce: true,},vuedraggable: {name: "chunk-vuedraggable",test: /[\\/]node_modules[\\/]vuedraggable[\\/]/,chunks: "all",priority: 8,reuseExistingChunk: true,enforce: true,},zrender: {name: "chunk-zrender",test: /[\\/]node_modules[\\/]zrender[\\/]/,chunks: "all",priority: 10,reuseExistingChunk: true,enforce: true,},},},},module: {rules: [],},}),chainWebpack(config) {if (!isProd) {config.optimization.minimizers.delete("terser");config.optimization.minimizers.delete("css");config.module.rule("js").test(/\.jsx$/).exclude.add(/node_modules/).end();config.module.rule("jsEsbuild").test(/\.js$/).exclude.add(/node_modules/).end().use("esbuild").loader("esbuild-loader").options({loader: "js",target: "es2015",}).end();}config.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();config.plugin("html").tap((args) => {const date = new Date().toLocaleString();args[0].createDate = date;return args;});},
});function resolve(dir) {return path.join(__dirname, dir);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/82234.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 设置表字段自动赋值创建时间,以及自动更新某一个字段的更新时间

使用场景 一般表设计中记录都有创建时间以及更新时间&#xff0c;而 Mysql 也支持了这种通用的设计需求。 即&#xff1a;可以通过默认值来给时间字段自动赋值&#xff0c;在创建时的默认值就是当前时间也就是记录的创建时间。 记录更新&#xff1a;即某一记录更新时我们要更…

OceanMind海睿思签约常州市建筑科学研究院,打造检验检测行业数字化转型标杆

近日&#xff0c;中新赛克海睿思 与 中国知名综合性建筑研究和科技创新型高科技企业——常州市建筑科学研究院集团股份有限公司&#xff08;以下简称“建科股份”&#xff09;达成深度战略合作&#xff0c;为建科股份提供行业领先的数据工程建设服务&#xff0c;携手推进检验检…

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理?

对于pycharm 运行的时候不在cmd中运行&#xff0c;而是在python控制台运行的情况&#xff0c;如何处理&#xff1f; 比如&#xff0c;你在运行你的代码的时候 它总在python控制台运行&#xff0c;十分难受 解决方法 在pycharm中设置下即可&#xff0c;很简单 选择运行点击…

opencv 车牌号的定位和识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a;&#xff08;识别车牌颜色和车牌号&#xff09; 查看历史记录界面&#xff1a; 二、原理介绍&#xff1a; 车牌检测->图像灰度化->Canny边缘检测->膨胀与腐蚀 边缘检测及预处理…

Mac常见恶意软件再现,办公应用程序潜藏风险如何防范?

Mac电脑正受到臭名昭著的XLoader恶意软件的新变种的攻击&#xff0c;该恶意软件已被重写为在最好的MacBook上本地运行。 虽然XLoader至少从2015年开始出现&#xff0c;但在2021年发现macOS变体之前&#xff0c;它主要用于针对Windows PC。然而&#xff0c;该版本是作为Java程序…

stm32 之20.HC-06蓝牙模块

原理图显示使用usart3串口使用的是PB10和PB11引脚 直接配置usart3串口协议 void usart3_init(uint32_t baud) {GPIO_InitTypeDef GPIO_InitStructureure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;//端口B硬件时钟打开RCC_AHB1PeriphClockC…

阿里云配置MySQL-server 8.0远程登录

Ubuntu 22.04 LTS 安装MySQL-Server 8.0 # apt search mysql-server # apt install mysql-server重建服务 # service mysql stop # vi /etc/mysql/mysql.conf.d/mysqld.cnf ... bind-address 0.0.0.0 ... # service mysql start # lsof -i:3306 COMMAND PID USER FD …

SpringBoot利用ConstraintValidator实现自定义注解校验

一、前言 ConstraintValidator是Java Bean Validation&#xff08;JSR-303&#xff09;规范中的一个接口&#xff0c;用于实现自定义校验注解的校验逻辑。ConstraintValidator定义了两个泛型参数&#xff0c;分别是注解类型和被校验的值类型。在实现ConstraintValidator接口时&…

盈利能力低于预期,财报发布后股价暴跌97%,达达集团财务前景堪忧

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 财报公布后&#xff0c;达达集团的股价就像坐过山车一样 2023年8月15日美股收盘后&#xff0c;达达集团&#xff08;DADA&#xff09;公布了2023年第二季度财务财报&#xff0c;在财报公布后的短短几天内&#xff0c;达达集…

基于PyTorch框架下网络模型的使用与修改

目录 1 损失函数和反向传播1.1 损失函数1.2 反向传播 2 优化器3 现有网络模型的使用及修改4 网络模型的保存与读取4.1 网络模型的保存4.2 网络模型的读取&#xff08;加载&#xff09; 5 完整的模型训练套路6 利用GPU训练模型7 完整的模型验证套路&#xff1a; 1 损失函数和反向…

gitee创建仓库并上传代码实操记录

1、创建demo库 2、复制地址 3、下载到本地 4、复制文件至demo文件夹下 5、设置忽略文件 编辑文件.gitignore 替换为&#xff1a; # Created by .ignore support plugin (hsz.mobi) /target/* !.mvn/wrapper/maven-wrapper.jar src/test/ ### STS ### .apt_generated .clas…

java maven项目打jar包发布(精简版)

目录 一、maven打包 二、安装jdk环境 三、安装mysql 四、jar包传输到服务器 一、maven打包 先clean再package target文件夹下面有生成一个jar包 二、安装jdk环境 1、下载jdk cd /usr/local wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.…