推荐一款Vite中加载svg的小工具

最近开发中使用到一个好玩的Vite三方小插件vite-plugin-svg-icons很实用,可以辅助我们开发过程中快速加载svg小图标。其原理是在Vite编译器的时候通过一次性的DOM操作将SVG插入DOM结构中,然后通过使用内联SVG进行加载访问,极大的方便了我们的小图标引用模式。 若只是少量的svg图片加载建议食用,若是svg图片数量过多并不建议采用(过多的svg文件插入也会导致我们的html文件过大)。

安装

通过上述了解后,接下我们来配置使用vite-plugin-svg-icons插件,该插件需要Vite支持。

$ npm i  vite-plugin-svg-icons -D // 或
$ yarn add vite-plugin-svg-icons -D // 或
$ pnpm i vite-plugin-svg-icons -D

由于其主要是在编译打包期生效,所以放在devDependencies中即可。

配置

安装完成后,需要在vite.config.ts中引入该插件,并配置对应svg地址:

// vite.config.ts
import * as path from 'node:path'
import type { ConfigEnv, UserConfig } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import Unocss from 'unocss/vite'export default ({ mode }: ConfigEnv): UserConfig => {return {plugins: [vue(),vueJsx(),Unocss(),createSvgIconsPlugin({// 指定需要缓存的图标文件夹iconDirs: [path.resolve(process.cwd(), 'src/bpmn-icons')],// 指定symbolId格式symbolId: '[name]',customDomId: '__svg__icons__dom__',}),],
}

vite.config.ts配置完成后还需要再程序的入口处引入virtual:svg-icons-register 库用于注册插入SVGDOM树:

// main.ts
import 'virtual:svg-icons-register'
.......

封装组件

完成上述的配置操作后,我们就可以封装一个内联SVG方便随时使用了,我这里使用的VUE3作为开发框架,你也可以使用React、nextjs等进行封装,原理相同。

// svg-icon.vue
<script lang="ts">
import { defineComponent } from 'vue'export default defineComponent({name: 'BpmnIcon',inheritAttrs: false,props: {name: {type: String,default: 'bpmn-icon-process',},color: {type: String,default: '#1d1d1f',},},
})
</script><template><svg class="bpmn-icon h-[40px] w-[40px]" aria-hidden="true"><use :xlink:href="`#${name}`" :fill="color" /></svg>
</template>

上述有用到unocss方式进行样式渲染,配置使用请参考前文:【开发一个Vue3组件】 | 如何创建一个本地库项目

使用

通过上述封装操作后,我们就可以和其他组件一样来使用这个组件了,这里使用的是我一个已有项目的代码不额外写一个测试页面了,因为使用的确特别的简单,示例代码如下:

// test.vue<div class="panel-header flex items-center gap-5 bg-light-300 px-3 py-5"><SvgIcon name={bpmnIconName.value}></SvgIcon><div class='inline-block'><p class="mb-0 mb-1 text-[1.3em] font-bold text-black">{elementType.value}</p><p class="mb-0 pb-0 text-[1em] text-black">{bpmnName.value}</p></div>
</div>

展示效果如下:

插入的svg Dom如下:

多说一句,这个插件大家根据需求选择是否使用,若SVG实在过大过多还不如单次加载SVG来的更好,并非什么都是越全越好,选择合适的更为重要!更多精彩内容欢迎访问我的个人站:胖蔡说

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

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

相关文章

Vue 3中的数据监测神器:watch vs watchEffect

Vue 3中的数据监测神器&#xff1a;watch vs watchEffect Vue 3作为一种现代的JavaScript框架&#xff0c;引入了一些新的特性和改进。其中&#xff0c;watch和watchEffect是Vue 3中用于响应式数据监测的重要功能。本文将深入探讨Vue 3中watch和watchEffect的区别&#xff0c;帮…

自定义镜像【项目部署】

镜像就是包含了应用程序&#xff0c;程序运行的系统函数库&#xff0c;运行配置等文件包&#xff0c;构建镜像的过程其实就是把相应文件打包的过程 1&#xff09;常用指令&#xff1a; Dockerfile就是一个文本文件&#xff0c;其中包含一个个的指令&#xff0c;用指令来说明要…

外贸路上遇到的那些仿佛天上掉馅饼的事情

有时候不得不感叹&#xff0c;在这个时代&#xff0c;骗子都在绞尽脑汁地满足我们所有的需求&#xff0c;不需要我们任何的付出就可以得到高额的佣金&#xff0c;想一想&#xff0c;真是一件美事&#xff0c;不信&#xff0c;请看一下下边的邮件内容吧&#xff01;&#xff1a;…

【LeetCode: 889. 根据前序和后序遍历构造二叉树 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

leecode1253 | 重构两行二进制矩阵

题也好理解 给定两个整数upper、lower&#xff0c;一个数组 colsum&#xff0c;其中upper 是二维矩阵中上面一行的所有元素之和&#xff0c;注意这个二维 2*n 的矩阵是由二进制数组成&#xff08;所以里面的元素由0、1、2组成&#xff09;同理&#xff0c;lower 是下面一行的所…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

[corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape

前言 题目来源&#xff1a;竞赛官网 – 建议这里下载&#xff0c;文件系统/带符号的 vmlinux 给了 参考 [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape Exploiting poll_list Objects In The Linux Kernel – 原作者文章&#xff0c;poll_list 利用方式…

TestNG与ExtentReport单元测试导出报告文档

TestNG与ExtentReport集成 目录 1 通过实现ITestListener的方法添加Reporter log 1.1 MyTestListener设置 1.2 输出结果 2 TestNG与ExtentReporter集成 2.1 项目结构 2.2 MyExtentReportListener设置 2.3 单多Suite、Test组合测试 2.3.1 单Suite单Test 2.3…

【selenium】八大元素定位方式|xpath css id name...

目录 一、基础元素定位 二、cssSelector元素定位——通过元素属性定位 三、xpath元素定位——通过路径 1 、xpath绝对定位 &#xff08;用的不多&#xff09; 缺点&#xff1a;一旦页面结构发生变化&#xff08;比如重新设计时&#xff0c;路径少两节&#xff09;&#x…

【PX4学习笔记】04.QGC地面站的使用

目录 文章目录 目录PX4代码烧入PX4固件代码的烧入方式1PX4固件代码的烧入方式2 QGC地面站的基础使用连接地面站的方式查看关键的硬件信息 QGC地面站的Application Settings模块Application Settings模块-常规界面单位其他设置数据持久化飞机中的数传日志飞行视图计划视图自动连…

【C++练级之路】【Lv.8】【STL】list类的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、结点二、迭代器2.1 成员变量与默认成员函数2.2 operator*2.3 operator->2.4 operator2.5 operator- …

Qt_快速安装指南

下载Qt在线安装程序&#xff08;不仔细介绍&#xff09;注册Qt账号&#xff08;不仔细介绍&#xff09;使用快速运行的命令&#xff0c;按照指定的下载地址下载 在Qt指定目录打开cmd命令窗口.\eqt-unified-windows-x86-4.0.1-1-online. exe --mirror https://mirrors.ustc.edu.…