Vite使用svg-企业级开发(支持本地svg和网络svg渲染)

简介: 本教程介绍如何在Vite项目中集成SVG图标插件。首先安装`vite-plugin-svg-icons`,配置插件指向SVG图标目录,并注册全局组件。接着创建SVG图标组件,支持内部图标与外部图片展示。通过简单配置,即可在页面中灵活使用各类SVG图标,提升开发效率。

1. 安装vite-plugin-svg-icons插件

$ yarn add vite-plugin-svg-icons -D
# or
$ npm install vite-plugin-svg-icons -D

2. 插件配置

  1. 配置插件在vite.config.ts
import {
    createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

export default () => {
   
  return {
   
    plugins: [
      createSvgIconsPlugin({
   
        // 指定要缓存的图标文件夹<**必须和你存放svg文件夹路径一致**>
        iconDirs: [path.resolve(process.cwd(), 'src/icons')],
        // 指定symbolId格式<可以保持默认格式>
        symbolId: 'icon-[dir]-[name]',

        /**
         * 自定义插入位置<选填>
         * @default: body-last
         */
        // inject?: 'body-last' | 'body-first'
        /**
         * 自定义dom id <可以保持默认格式>
         * @default: __svg__icons__dom__
         */
        customDomId: '__svg__icons__dom__',
      }),
    ],
  }
}

2.注册脚本在/src/main.ts添加

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

这里已经生成了svg精灵图

3.组件中使用

1.创建组件

// /src/utils/validate.ts
/**
 * 判断是否为外部资源
 * @param { string } path
 * @returns
 */
export function isExternal(path: string): boolean {
   
  return /^(https?:|mailto:|tel:)/.test(path)
}
// /src/components/SvgIcon.vue
<template>
  <!-- 展示外部图片 -->
  <div
    v-if="isExternal"
    :style="styleExternalIcon"
    class="svg-external-icon svg-icon"
    :class="className"
  ></div>
  <!-- 展示内部图片 -->
  <svg v-else class="svg-icon" :class="className" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script lang="ts" setup>
import {
    isExternal as external } from '@/utils/validate'

import {
    computed } from 'vue'

const props = defineProps({
   
  icon: {
   
    type: String,
    required: true
  },
  className: {
   
    type: String,
    default: ''
  }
})

/**
 * 判断当前图标是否为外部图标
 */
const isExternal = computed(() => external(props.icon))

/**
 * 外部图标样式
 */
const styleExternalIcon = computed(() => ({
   
  mask: `url(${
     props.icon}) no-repeat 50% 50%`,
  '-webkit-mask': `url(${
     props.icon}) no-repeat 50% 50%`
}))

/**
 * 内部图标
 */
const iconName = computed(() => `#icon-${
     props.icon}`)
</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>

2.目录结构

# src/icons

- icon1.svg
- icon2.svg
- icon3.svg
- dir/icon1.svg

3.页面使用

<script setup lang="ts">
import SvgIcon from '@/components/SvgIcon.vue'
</script>

<template>
    <SvgIcon icon="icon1"></SvgIcon>
    <SvgIcon icon="icon2"></SvgIcon>
    <SvgIcon icon="icon3"></SvgIcon>
    <SvgIcon icon="https://xxx.xx.com/icon.svg"></SvgIcon>
    <SvgIcon icon="dir-icon1"></SvgIcon>
</template>
目录
相关文章
|
1月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
275 0
|
5月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
328 61
|
5月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
5月前
|
监控 安全 网络协议
恶意软件无处逃!国内版“Manus”AiPy开发Windows沙箱工具,进程行为+网络传输层级监控! 头像 豪气的
NImplant.exe 是一款后渗透测试工具,可实现远程管理与持久化控制。其优点包括无文件技术、加密通信和插件扩展,但也存在被检测风险及配置复杂等问题。为深入分析其行为,我们基于 aipy 开发了 Windows 沙箱工具,针对桌面上的 NImplant.exe 进行多维度分析,涵盖进程行为、网络连接(如 TCP 请求、目标 IP/域名)、文件控制等,并生成传输层监控报告与沙箱截图。结果显示,aipy 工具响应迅速,报告清晰易读,满足分析需求。
|
8月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
312 12
|
8月前
|
运维 安全 网络安全
企业级通配符 SSL 证书:企业网络安全的坚实护盾
企业级通配符SSL证书是企业的网络“身份证”,一个证书即可保护主域名及所有子域名,简化管理流程。它采用先进加密算法,确保数据传输安全,防止黑客攻击。拥有此证书可提升网站信任度,增强品牌形象,吸引更多客户。同时,它灵活适配业务变化,降低成本,为企业数字化发展提供有力支持。
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
355 4
鸿蒙开发:切换至基于rcp的网络请求
|
9月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
268 0
|
12月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
安全 网络安全 数据中心
转发路由器 Transit Router(TR):实现企业级互联网络的灵活与可靠
【10月更文挑战第18天】转发路由器(Transit Router,TR)是企业级网络架构中的关键设备,用于实现不同网络间的高效互连。本文通过问答形式,详细介绍了TR的基本概念、主要功能、配置方法及应用场景,强调了其在多数据中心互联、云服务接入、ISP网络核心和企业分支互联中的重要性,并探讨了确保TR高可用性和安全性的措施。
435 3

热门文章

最新文章