14、配置svg图标使用环境

vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇 在一文整合了,并将中提供的图标进行全局注册,这样可以很方便的延续Element UI的风格 —— 通过)。在真实的企业级开发中,内置的图标通常很难满足业务需求,项目中需要引入大量的 SVG 图标资源,本文描述如何在 Vue3 + Vite2 环境中使用 SVG 图标,封装一个支持本地 SVG 图标和在线 SVG 图标的组件。文中实现的组件会内置到脚手架中(通过yyg命令行创建的项目内置该组件),如果在此之前已经通过 yyg-cli 创建了项目,可以按照本文的步骤封装 SVG 图标组件。 阅读详情

1、安装依赖

在vue3 + vite项目中使用svg图标,需要先安装如下插件:

// 建议一起安装,避免报错
yarn add -D vite-plugin-svg-icons
// 如果因为 vite-plugin-svg-icons 版本问题导致报错,可以安装如下一个依赖
yarn add fast-glob -D

2、配置插件规则

安装完 vite-plugin-svg-icons 插件依赖之后,在vite.config.ts配置文件的plugins插件配置项中如下配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import {createSvgIconsPlugin} from "vite-plugin-svg-icons";

export default defineConfig({
  plugins: [
    vue(),
    // 配置 svg 插件
    createSvgIconsPlugin({
      // 配置图标文件夹路径(必须)
      iconDirs: [resolve(process.cwd(), 'src/assets/svg')],

      // 配置SymbolId格式
      symbolId: 'icon-[dir]-[name]',
    }),
  ],
})

在上面的示例中,我们使用svg插件库提供的 createSvgIconsPlugin 函数创建了一个插件实例,并将其配置到了全局 plugins 中,使其实例能够在全局有效。同时,我们也对该插件实例进行了定制配置,例如,其中的 iconDirs 和 symbolId 两个配置项,其中,iconDirs 指定 svg 图标的加载目录,symbolId 指定图标名称格式。
下面附赠我本人在此练习项目中使用的初版较完整的 vite.config.ts 配置,内容如下,以供参考:

import {defineConfig, loadEnv} from "vite";
import vue from "@vitejs/plugin-vue";
import {createSvgIconsPlugin} from "vite-plugin-svg-icons";
import {resolve} from "path";

// vite的相关配置
export default defineConfig(({command, mode}) => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。
  // 如果是两个参数则读取我们配置在 .env.mode的环境变量;加第三个参数 ”“ 则当前主机的全量环境变量配置
  const env = loadEnv(mode, process.cwd());
  console.log("读取.env中配置的环境变量", env);
  // 读取运行模式,如果是dev运行 "dev": "vite --mode development", 则mode为development
  console.log("读取mode变量", mode);
  // process.cwd() 可以获取当前工作目录,例如 D:\Git\Git-Repository\vue3-template-web
  console.log("读取工作路径变量", process.cwd());

  return {
    plugins: [
      vue(),
      createSvgIconsPlugin({
        // 配置图标文件夹路径(必须)
        iconDirs: [resolve(process.cwd(), 'src/assets/svg')],

        // 配置SymbolId格式
        symbolId: 'icon-[dir]-[name]',
      })
    ],
    // 此处配置项目服务参数
    server: {
      host: "0.0.0.0", // 项目运行地址,此处代表localhost
      port: 3000, // 项目运行端口
      open: true, //编译之后是否自动打开页面
      hmr: true, // 是否开启热加载
      https: false, // 是否开启https模式
      cors: true, // 是否开启跨域
      // 设置代理,代理所有从vite发出的url中带/api的请求
      proxy: {
        "^/api/.*": {
          // url请求路径匹配 /api
          target: env.VITE_APP_BASE_URL, // 匹配上则转发到target 目标Host
          // 将vite服务的Host更改为target目标 URL ,如果不设置true则发出的请求Host依旧是vite服务的Host
          changeOrigin: true,
          // 路径重写,剔除/api,然后将剩余的path拼接到target后,组成最终发出去请求
          // path 参数代表的是端口后的路径,例如http://localhost:6666/api/userInfo ,则path代表/api/userInfo
          rewrite: (path: string) => path.replace(/^\/api/, ""),
        },
      },
    },
    logLevel: "info",
    // 配置src的别名@
    resolve: {
      alias: {
        "@": resolve(__dirname, "./src"),
      },
    },
    // 配置 less ,使其一些新特性能够生效
    css: {
      preprocessorOptions: {
        less: {
          javascriptEnabled: true,
          additionalData: '@import "@/styles/variables.less";'
        }
      }
    }
  };
});

3、全局引入svg图标注册器

在配置完成之后,我们还需要在 main.ts 中全局引入如下内容:

import 'virtual:svg-icons-register'

4、封装成svg图标组件

虽然完成了前面三步就可以在项目中使用了,使用方式如下:

<!-- 引入名称为icon-test的svg文件并渲染 -->
<svg aria-hidden="true">
  <use xlink:href="#icon-phone" fill="red"></use>
</svg>

特别说明:在上例中 xlink:href 迎来关联 svg 图标,# 井号代表 v-svg 指令的缩写。因为,上面我们已经定义好了 svg 的存放目录和使用格式,因此,想要正确使用就需要将 svg 图标存放在 src/assets/svg 目录下,然后在使用时格式要遵循 icon-[dir]-[name] ,其中中括号代表可选,所以,假如我们在 src/assets/svg目录下存放了一个名称为 release 的 svg 图标,那么,该图标使用标识就是 icon-release 。
在完成了以上步骤之后,虽然我们是可以全局使用 svg 图标了,但是每使用一次都必定会存在下面这样的重复代码:

<svg aria-hidden="true">
  <use xlink:href="#icon-xxx"></use>
</svg>

因此,我们有必要考虑将其封装成一个组件来使用,具体做法如下:

<template>
    <svg aria-hidden="true" :width="size" :height="size">
        <use :href="prefix + name" :fill="color"></use>
    </svg>
</template>

<script setup lang="ts">
defineProps({
    // svg 图标前缀
    prefix: {
        type: String,
        default: "#icon-"
    },
    // svg 图标名称
    name: {
        type: String,
        required: true
    },
    // svg 图标颜色
    color: {
        type: String,
        default: ""
    },
    size: {
        type: [String, Number],
        default: 20
    }
})
</script>
<svg-icon name="release"></svg-icon>

在上面封装的svg图标组件中,为了使得每个图标能够进行自定义样式,我为该组件添加了几个组件绑定属性,通过这些属性,我们可以动态的改变每一个图标的样式。如果组件属性不够用,我们还可以继续添加。例如,上面的组件中,我们还可以添加一个 size 属性用来控制组件大小。下面从阿里巴巴图标库下载一个svg图标文件,并命名为 release ,放入项目中如下目录:
image.png
没加 size 属性测试效果如下:
image.png
添加了 size 属性测试效果如下:
image.png

额外说明

1、在SVG 2规范中,xlink:href属性已经被废弃,取而代之的是href属性。因此,在SVG 2中,可以省略xlink前缀,直接使用href属性。
但是,在一些老版本的浏览器中,可能仍然需要使用xlink:href属性。为了兼容性,可以在使用xlink:href属性时保留xlink前缀,或者使用href属性时同时添加xlink:href属性,以确保在不同的浏览器中都能正常显示。例如:

<svg>
  <use xlink:href="#icon"></use> <!-- 旧版本浏览器需要 xlin:href 属性 -->
  <use href="#icon" xlink:href="#icon"></use> <!-- 兼容性写法 -->
</svg>

2、如果想要不出错的使用 svg 图标,请务必按照我说的步骤一步一步来,同时也要仔细看好每一处的细节和文字解释,避免因粗心导致出现错误。
3、详细的使用和配置内容可以参考该插件官网,地址为vite-plugin-svg-icons官网

SVG图标配置---封装svg全局组件!!! SVG图标配置---封装svg全局组件 阅读详情

相关推荐

前端开发之中svg图标的使用和实例

本章讲解svg图标在vue3中使用svg图片我们可在阿里云矢量图标库中下载阿里云矢量图标库。

m0_50207524的博客 3109

vue2&3自定义svg图标组件

可参考: 未来必热:SVG Sprites技术介绍 懒人神器:svg-sprite-loader实现自己的Icon组件 在Vue3项目中使用svg-sprite-loader

pscool的博客 6872

Android 14电池图标自定义指南:从矢量路径修改到充电动画优化

本文提供了Android 14电池图标深度定制指南,涵盖从解析config.xml中的矢量路径到优化充电动画的全流程。通过修改SVG路径参数和ThemedBatteryDrawable的绘制逻辑,开发者可以彻底重塑电池图标的外观与动态行为,实现高度个性化的系统UI定制。

nnn11的博客 948

插件--SVG

一、初识SVG 1.1 什么是SVG? SVG英文全称为Scalable Vector Graphics,意思为可缩放的矢量图 位图和矢量图 在计算机中有两种图形, 一种是位图, 一种是矢量图 位图: 传统的 jpg / png / gif图都是位图 位图是一个个很小的颜色小方块组合在一起的图片。一个小方块代表1px 位图的优点和缺点: 优点: 色彩丰富逼真 缺点: 放大后会失真, 体积大 矢量图: 矢量图是用XML格式定义, 通过各种「路径」和「填充颜色」来描述渲染的的

小白小白从不日别的博客 3386

React Icons实战:使用React高效集成SVG图标与数学生成图形

React Icons通过将主流图标库(如FontAwesome、Material Icons等)统一为React组件形式,解决了传统图标引入方式中常见的样式冲突与加载性能问题。其采用ES6模块化设计,支持按需导入,确保仅打包实际使用的图标,有效减小构建体积。设计Icon组件时,应明确定义输入参数类型,提高代码可读性和 IDE 提示能力。size?color?: string;className?: string;若使用 TypeScript,还可结合实现枚举约束:size。

weixin_42571280的博客 624

树莓派4B网线直连Windows全流程:从IP查询到SSH登录避坑指南

本文提供了一份详细的树莓派4B通过网线直连Windows电脑的实战指南。核心步骤包括配置Windows网络共享、查询树莓派IP地址以及通过SSH进行安全登录与初始配置。文章深入解析了直连的网络原理,并重点分享了使用CMD命令和工具定位IP、避免常见错误的避坑技巧,帮助用户在没有显示器或路由器的环境下快速完成树莓派初始化。

grape的博客 1080

SVG图标字体化终极指南:从零到一的完整生成教程

还在为项目中的图标管理而头疼吗?手动处理SVG图标总是遇到兼容性问题?本文将带你彻底掌握SVG图标转换为字体文件的完整流程,让你轻松实现图标系统的标准化管理。通过Bootstrap Icons项目提供的强大工具链,你只需简单几步就能生成专业的图标字体,大幅提升开发效率和用户体验。 ## 为什么需要图标字体化?🚀 在传统开发中,图标管理常常面临诸多痛点: **常见问题:** - ❌ 图标尺寸

gitblog_00423的博客 771

ArcGIS Pro 拓扑编辑实战:从‘地图拓扑’到‘共享编辑’,手把手教你批量修改要素

本文详细介绍了ArcGIS Pro中的拓扑编辑功能,从地图拓扑配置到共享编辑技巧,手把手教你如何批量修改要素。通过实战案例展示拓扑编辑在城市规划、地籍管理等场景中的应用,显著提升编辑效率并减少拓扑错误,是现代GIS技术的重要生产力工具。

weixin_30500473的博客 505

SVG图标转字体工具完整指南:10分钟掌握核心技巧

你是否曾为项目中图标管理混乱而烦恼?😫 面对几十个SVG文件,每次修改都要逐个调整,开发效率直线下降?别担心,今天我将手把手教你如何使用SVG转字体工具,让图标管理变得简单高效! ## 问题导入:图标管理的痛点与挑战 ### 实用技巧:识别常见困扰场景 - **维护成本高**:每次新增图标都要手动修改代码和样式 - **加载性能差**:多个SVG文件导致HTTP请求过多 - **样式不统一*

gitblog_00964的博客 988

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7376

Python小白也能玩转迅投QMT量化交易?手把手教你从安装到第一个策略

本文为零基础Python用户提供了上手迅投QMT量化交易平台的完整指南。从Python 3.6环境配置、QMT客户端获取安装,到核心概念讲解,并手把手教你编写并回测一个经典的双均线交易策略,帮助初学者快速迈出量化交易的第一步。

weixin_29103191的博客 763

Waybar图标定制终极指南:从SVG到字体图标的完整美化方案

Waybar作为一款**高度可定制的Wayland状态栏**,提供了强大的图标定制功能,让用户能够打造完全个性化的桌面体验。本文将详细介绍从SVG图标到字体图标的全流程美化方案,帮助你轻松实现专业级的界面效果。 [![Waybar界面预览](https://raw.gitcode.com/GitHub_Trending/wa/Waybar/raw/06484547d182057159c4bd58

gitblog_00080的博客 501

双足肌肉骨骼机器人

Clone Alpha的技术突破标志着人类进入生物-机械融合的新纪元,但其影响远超技术范畴。从伦理框架重建(如拉马克进化算法中的知识传递机制)到经济模式革新(如UBI应对机器人失业潮),需全球协作制定前瞻性政策。若放任技术无序扩张,人类社会或将面临“能力断层”与“控制权丧失”的双重危机;反之,若以人类福祉为核心导向,仿生机器人亦可成为弥合残障歧视、提升整体文明层级的钥匙。当下选择,将决定人类究竟是技术的创造者,还是被重构的客体。

百态·数智思维 | 聚焦大数据、量化与未来AI 985

告别单调下拉框:Bootstrap-select 与 SVG 图标深度整合指南

你是否还在为网站下拉框的单调外观发愁?客户是否抱怨过表单元素与整体设计不匹配?本文将手把手教你通过 Bootstrap-select 实现自定义 SVG 图标集成,让下拉框焕发新生。读完本文,你将掌握选中状态定制、图标库切换和动态效果实现的全流程技巧。 ## 核心痛点与解决方案 传统 HTML 下拉框(Select)存在三大局限:无法自定义选中标记、图标显示依赖字体库、样式难以与现代 UI 融...

gitblog_00957的博客 614

深度强化学习研究笔记(1)——入门(马尔科夫决策过程,贝尔曼方程,价值迭代和策略迭代)

1. 强化学习(Reinforcement learning)概述 强化学习(Reinforcement learning)的基本内涵是将问题用代理和环境进行建模。其中代理能够对环境执行一些特定的动作a∈Aa \in Aa∈A,从而到达某个状态s∈Ss \in Ss∈S,然后我们就可以根据该状态为代理赋予特定的奖励rrr。强化学习的基本思想如下图所示: 代理的目标是最大化未来的奖励总和,它通过将...

越野者的博客 5280

算法导论之线性规划

线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。 在一般线性规划问题中,最优化一个

医疗影像检索 2万+

SVG图标转字体文件完整指南:告别图标管理烦恼!

还在为项目中杂乱的SVG图标管理而头疼吗?每次添加新图标都要手动修改CSS和HTML?本文将为你揭秘SVG图标转字体文件的完整流程,让你彻底告别图标管理的烦恼!🎯 ## 痛点分析:为什么你需要图标字体化? 在Web开发中,SVG图标管理常常面临以下挑战: - **文件体积庞大**:数百个SVG文件占用大量空间 - **加载性能问题**:多个HTTP请求影响页面加载速度 - **维护成本高*

gitblog_00700的博客 794

零基础学simulink仿真建模--基于Simulink进行近端策略优化(PPO)路径规划的仿真建模

特点高效性与稳定性:通过引入剪裁机制,在更新策略时限制步长,从而提高了训练过程的稳定性和效率。适用于多种动作空间:可以处理连续和离散的动作空间问题。无需模型:不需要预先知道环境的确切模型,适合复杂或未知环境。挑战收敛速度与稳定性:确保算法能够在合理的时间内找到近似最优解,并保持训练过程的稳定性。探索与利用平衡:在探索新路径和利用已知信息之间取得平衡。计算资源:对于大规模状态空间和动作空间,计算资源需求较高。首先明确要模拟的任务内容。目标(例如到达指定地点、避开障碍物等)。

amy_mhd的博客 249

Carbon图标动画全攻略:从静态到动态的SVG实现方案

你是否还在为界面中静态乏味的图标而烦恼?用户是否常常忽略关键操作按钮?在现代UI设计中,图标作为视觉交互的核心元素,其动态反馈能力直接影响用户体验。Carbon Design System作为IBM推出的企业级设计系统,提供了一套完整的图标体系,但如何赋予这些SVG图标生动的动态效果却鲜有系统教程。本文将从SVG动画原理出发,结合Carbon Motion运动系统,手把手教你实现6种实用图标动画效...

gitblog_00611的博客 978

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

vue2使用svg的配置和流程

cnpm install -S svg-sprite-loader 2.创建svg组件(vue组件) 3.注册为全局组件及配置(js文件) // 建议把当前文件放在svg目录平级 4.在main.js引入 import '@/src/assets/mySvg/index.js'; 6.使用 // iconClass 的值是svg的名字 具体阅读svg.vue文件 ...

1777

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

hugo-PaperMod自定义SVG图标:替换默认图标集

你是否厌倦了博客主题中同质化的默认图标?在构建个人品牌的过程中,细节往往决定差异——而SVG(可缩放矢量图形)图标作为页面交互的视觉入口,正是提升用户体验的关键节点。hugo-PaperMod主题虽内置丰富图标集,但面对个性化需求时,许多用户仍受困于: - 社交平台图标不全(如缺失国内新兴平台) - 图标风格与博客整体设计冲突 - 无法通过CSS实现动态效果定制 本文将系统讲解如何在hugo-P...

gitblog_00528的博客 762

图标字体生成终极指南:5分钟学会SVG到WOFF2转换

还在为网页加载大量小图标而烦恼吗?图标字体技术让你用一个文件解决所有图标显示问题。本文将带你从零开始,掌握将SVG图标转换为高性能WOFF2字体文件的完整流程。 ## 为什么选择图标字体? **图标字体**已经成为现代Web开发的主流选择。相比传统的图片图标,图标字体具有以下优势: - **矢量缩放**:任意放大缩小不失真 - **颜色控制**:通过CSS轻松改变图标颜色 - **性能优化*

gitblog_00854的博客 658

搭建Vue3模板

vue3 vite element-plus

H_ZMY的博客 1520

react (create-react-app)项目中如何优雅的使用 svg组件

react 中如何优雅的使用 svg 背景: 以前 vue 项目中使用 svg-sprite-loader 来处理 svg 文件使用非常方便,加载 svg 文件,配置完定义全局组件就好了,最近在写 react 项目,如法炮制,把 vue 中使用 svg 的思路带到 react 中来,实现的效果同样是只要把 svg 文件放到指定文件夹下使用文件名称结合 react 组件就可以使用。 项目环境:cre...

前端开发者 1万+

如何将SVG转化为React组件:云存储时代的图标管理新范式

在当今云存储与前端开发深度融合的时代,图标管理面临着格式不统一、性能优化难、跨平台适配复杂等挑战。GitHub 加速计划中的 svgr 项目(Transform SVGs into React components 🦁)为开发者提供了一种革命性的解决方案,它能将静态的 SVG 文件转化为可复用的 React 组件,彻底改变传统图标管理方式。 [![SVGR项目标志](https://raw.g

gitblog_01119的博客 1084

Vue3.js中使用svg:vite-plugin-svg-icons

本文使用vue3.js提供的option-api方式实现。将svg图标文件放在icons目录下即可。配置文件vite.config.js。

彭世瑜的博客 2261
上一篇: 什么是schema
下一篇: 1、VUE3的基本功能回顾
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值