简化 SVG 管理:将路径转换为单个 JS 常量文件

简化 svg 管理:将路径转换为单个 js 常量文件

构建 react.js 应用程序时,有效管理 svg 图标至关重要。 svg 提供了响应式设计所需的可扩展性和灵活性,但在大型项目中处理它们可能会变得很麻烦。这就是 svg-path-constants 的用武之地,它是一个 cli 工具,旨在通过将 svg 路径转换为可重用常量来简化 svg 工作流程。

为什么使用 svg 和常量?

在上一篇文章《react.js 项目中 svg 图标管理选项的综合比较》中,我讨论了管理 svg 图标的各种方法,包括内联 svg、svg 精灵以及为每个图标使用 react 组件。虽然每种方法都有其优点和缺点,但仍然存在一个挑战:保持 svg 路径井然有序且可重用。

使用 svg 路径常量可提供较小的包大小和快速的构建时间。

什么是 svg 路径常量?

svg-path-constants 是一个 cli 工具,可帮助您从 svg 文件生成常量,从而更轻松地在 react 项目中集成和管理 svg 图标。它将 svg 路径转换为 ​​js 常量,支持灵活的命名约定,并允许可定制的输出。

主要特点:

从 svg 文件生成常量:快速将 svg 路径转换为常量。灵活的命名约定:支持camelcase、pascalcase、snake_case和screaming_snake_case。可自定义输出:使用自定义模板和文件路径生成常量。属性转换:自动将 svg 属性(如不透明度、填充不透明度、描边和填充)转换为路径字符串。单个或多个输出:根据您的输入结构生成单个输出文件或多个文件。

svg-path-constants 入门

您可以通过 npx 立即开始使用 svg-path-constants:

npx svg-path-constants@latest

或者,您可以全局安装它或作为开发依赖项:

npm install -g svg-path-constantsnpm install --save-dev svg-path-constants

用法示例

基本用法

假设您在 src/assets/icons 中有 svg 文件,并且想要在 src/components/icon/paths.js 中生成常量:

npx svg-path-constants@latest -i src/assets/icons -o src/components/icon/paths.js

输出示例:

// src/components/icon/paths.jsexport const foldericon1 = "m10 10 h 90 v 90 h 10 z"; // example svg pathexport const foldericon2 = "m20 20 h 80 v 80 h 20 z"; // example svg path

自定义命名格式

指定不同的命名格式,如 pascalcase:

npx svg-path-constants@latest -i src/assets/icons -o src/components/icon/paths.js -f pascalcase

输出示例:

// src/components/icon/paths.jsexport const foldericon1 = "m10 10 h 90 v 90 h 10 z"; // example svg pathexport const foldericon2 = "m20 20 h 80 v 80 h 20 z"; // example svg path

使用模板进行输出

使用自定义模板控制命名和文件输出:

npx svg-path-constants@latest -i src/assets/icons -o src/components/icon/{-2,-1}/{0}.js -t "{1,-3}"

输出示例:

// src/components/icon/folder/icon1.jsexport const foldericon1 = "m10 10 h 90 v 90 h 10 z"; // example svg path// src/components/icon/folder/icon2.jsexport const foldericon2 = "m20 20 h 80 v 80 h 20 z"; // example svg path

处理 svg 属性

svg-path-constants 可以将 svg 属性(如不透明度、填充不透明度、描边和填充)转换为路径字符串的组件。

svg 示例:

    

生成的路径常量:

export const myicon = "o0.5 o0.8 fff000 f00ff00 m10 10 h 90 v 90 h 10 z";

opacity=”0.5″ 变为 o0.5fill-opacity=”0.8″ 变为 o0.8笔画=“#ff0000”变为fff000fill=”#00ff00″ 变为 f00ff00

此功能允许您直接在路径字符串中保留基本样式信息,从而保持紧凑且信息丰富的表示形式。

示例:在 react 组件中使用 svg 路径常量

使用 svg-path-constants 生成 svg 路径常量后,您可以轻松地将它们集成到您的 react 组件中。这不仅可以保持您的代码整洁,还可以在您的应用程序中轻松重用 svg 路径。

第 1 步:生成 svg 路径常量

假设您已经运行以下命令来从 svg 文件生成常量:

npx svg-path-constants@latest -i src/assets/icons -o src/components/icon/paths.js

此命令生成一个文件 src/components/icon/paths.js ,其中包含如下常量:

// src/components/icon/paths.jsexport const foldericon1 = "m10 10 h 90 v 90 h 10 z"; // example svg pathexport const foldericon2 = "m20 20 h 80 v 80 h 20 z"; // example svg path

第 2 步:创建一个 react 组件来渲染 svg

现在,让我们创建一个 react 组件,使用生成的常量渲染这些 svg 图标。

import react from 'react';import { foldericon1, foldericon2 } from './paths'; // import the generated svg path constantsconst parsepathdata = (d) => {    const pathelements = [];    const pathcommands = d.split(/(o[d.]+|o[d.]+|f[0-9a-fa-f]+|f[0-9a-fa-f]+)/); // split by style commands    let attributes = null;    pathcommands.foreach((text, i) => {        const iscommand = boolean(i % 2);        if (iscommand) {            if (!attributes) {                attributes = {};            }            const match = text.match(/^(o([d.]+))?(o([d.]+))?(f([0-9a-fa-f]+))?(f([0-9a-fa-f]+))?$/);            const [, , opacity, , fillopacity, , stroke, , fill] = match;            if (opacity) attributes.opacity = opacity;            if (fillopacity) attributes["fill-opacity"] = fillopacity;            if (stroke) attributes.stroke = `#${stroke}`;            if (fill) attributes.fill = `#${fill}`;            return;        }        if (text.trim().length) {            pathelements.push({ ...attributes, d: text });        }    });    return pathelements;};const svgicon = ({ d, size = 24, color = 'currentcolor', ...props }) => {    const pathelements = parsepathdata(d);    return (                    {pathelements.map((attrs, index) => (                            ))}            );};const icondemo = () => (    

svg icon examples

folder icon 1

folder icon 2

);export default icondemo;

第 3 步:在您的应用程序中使用该组件

您现在可以在 react 应用程序中的任何位置使用 icondemo 组件来显示 svg 图标:

import react from 'react';import reactdom from 'react-dom';import icondemo from './components/icon/icondemo';reactdom.render(                ,    document.getelementbyid('root'));

解释:

parsepathdata 函数:

仅当 svg 文件中有不透明度或多种颜色时才需要。parsepathdata 函数处理扩展的 d 属性字符串,提取 o(不透明度)、f(填充颜色)和 f(描边颜色)等命令。它根据这些命令分割字符串,应用相应的属性,并返回路径元素数组。

svgicon 组件:

该组件采用 d 属性字符串,使用 parsepathdata 解析它,并渲染 svg 路径。该组件允许通过尺寸和颜色等道具进行自定义。

icondemo 组件:

这是一个演示组件,展示了如何使用具有不同 d 字符串、大小和颜色的 svgicon 组件。

接下来是什么?将光栅图像添加到常量

我目前正在开发一个 npm 库,该库将通过在每个生成的常量上方添加光栅图像(png)作为注释来增强 svg-path-constants。这将直接在代码中提供图标的可视化表示,从而更轻松地识别和管理 svg 路径。

结论

管理 react 项目中的 svg 路径并不一定很麻烦。使用 svg-path-constants,您可以保持图标井井有条,代码整洁,工作流程高效。很快,随着即将推出的用于将光栅图像添加到图标注释的库,您将拥有一种更加直观的方式来管理您的 svg 资源。

今天尝试 svg-path-constants:

npx svg-path-constants@latest

请继续关注更多更新!

以上就是简化 SVG 管理:将路径转换为单个 JS 常量文件的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490287.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ShowDEV – 我们为您的产品构建了一体化的人工智能指挥中心
上一篇 2025年12月19日 13:04:35
TailGrids React:+ Tailwind CSS React UI 组件
下一篇 2025年12月19日 13:04:50

相关推荐

  • Java大文件断点续传功能的实现方法与技术要点解析

    Java大文件断点续传功能的实现方法与技术要点解析Java大文件断点续传功能的实现方法与技术要点解析Java大文件断点续传功能的实现方法与技术要点解析Java大文件断点续传功能的实现方法与技术要点解析

    实现大文件断点续传的核心在于1. 文件分片上传:客户端将文件按固定大小切分为多个块,分别上传;2. 上传状态记录:服务端通过fileid、总分片数和已上传分片索引集合维护上传进度;3. 前端配合:前端使用file api切片并查询已上传分片,仅上传未传部分;4. 注意事项:包括唯一id生成、并发控制…

    2026年10月8日 • 用户投稿
    000
  • TCL小蓝翼P6 Plus AI健康空调,“全域风”无死角守护健康好空气

    TCL小蓝翼P6 Plus AI健康空调,“全域风”无死角守护健康好空气TCL小蓝翼P6 Plus AI健康空调,“全域风”无死角守护健康好空气TCL小蓝翼P6 Plus AI健康空调,“全域风”无死角守护健康好空气TCL小蓝翼P6 Plus AI健康空调,“全域风”无死角守护健康好空气

    在繁忙的都市生活中,家是每个人休憩心灵的温暖港湾。一个宜人的居家环境,不仅能显著提升生活品质,更能为身心健康注入源源不断的正能量。作为全新一代舒适型空调,tcl小蓝翼p6plus ai健康空调融合ai舒适、ai语音与ai省电三大核心技术,打造“全域森林风”,为用户持续输送清新健康的空气体验。 168…

    2026年10月8日 • 用户投稿
    000
  • 笔灵ai降重好用吗?怎么样使用呢?

    笔灵ai降重好用吗?怎么样使用呢?笔灵ai降重好用吗?怎么样使用呢?笔灵ai降重好用吗?怎么样使用呢?笔灵ai降重好用吗?怎么样使用呢?

    笔灵ai降重工具使用效果好,使用技巧包括输入完整段落、调整降重级别和手动调整。1.输入完整段落,工具能更好理解上下文。2.选择轻度、中度或重度降重,控制修改程度。3.使用后仔细阅读并手动调整,确保逻辑和表达准确。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek…

    2026年10月8日 • 用户投稿
    000
  • Windows11禁用系统托盘方法

    Windows11禁用系统托盘方法Windows11禁用系统托盘方法Windows11禁用系统托盘方法Windows11禁用系统托盘方法

    来看看在windows 11中如何隐藏系统托盘图标的操作方法。 1、 首先,在Windows 11操作系统中,需进入图形化设置界面进行相关配置。 2、 接着,定位到任务栏右侧的系统托盘区域,找到需要管理的图标。 法语写作助手 法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的…

    2026年10月8日 • 用户投稿
    000
  • AO3官方网站登录入口 | 安全稳定访问AO3的方法

    AO3官方网站登录入口 | 安全稳定访问AO3的方法AO3官方网站登录入口 | 安全稳定访问AO3的方法AO3官方网站登录入口 | 安全稳定访问AO3的方法AO3官方网站登录入口 | 安全稳定访问AO3的方法

    答案是使用官方域名archiveofourown.org并确认HTTPS加密连接。始终手动输入该网址,检查浏览器地址栏确保域名正确无误,开头为https://且有安全锁标志,避免点击来源不明链接,防止钓鱼网站窃取信息。遇到访问问题时,优先排查网络连接、清除缓存、禁用干扰扩展或更换DNS,同时关注AO…

    2026年10月8日 • 用户投稿
    500
  • Java中常用的加密算法实现与应用场景详细解析

    Java中常用的加密算法实现与应用场景详细解析Java中常用的加密算法实现与应用场景详细解析Java中常用的加密算法实现与应用场景详细解析Java中常用的加密算法实现与应用场景详细解析

    java开发中常用加密算法包括对称加密(如aes)、非对称加密(如rsa)、哈希算法(如sha-256)和数字签名。1. 对称加密适合大量数据加密,如文件或网络传输;2. 非对称加密用于身份验证和密钥交换,如https握手;3. 哈希算法用于校验数据完整性和密码存储;4. 数字签名确保数据来源可信和…

    2026年10月8日 • 用户投稿
    000
  • MySQL如何备份数据库 4种备份方案保障数据安全无忧

    MySQL如何备份数据库 4种备份方案保障数据安全无忧MySQL如何备份数据库 4种备份方案保障数据安全无忧MySQL如何备份数据库 4种备份方案保障数据安全无忧MySQL如何备份数据库 4种备份方案保障数据安全无忧

    mysql数据库备份是为数据创建副本以防止丢失并确保可恢复。1.逻辑备份(如mysqldump)适合小数据量或低恢复要求场景,导出sql语句便于迁移和转换,但速度较慢;2.物理备份(如xtrabackup)适合大数据量、高恢复时效需求,直接复制物理文件速度快但移植性差;3.制定备份策略需考虑频率、类…

    2026年10月8日 • 用户投稿
    200
  • 大航海时代传说37级老船长怎么打 西班牙海域挑战攻略

    大航海时代传说37级老船长怎么打 西班牙海域挑战攻略大航海时代传说37级老船长怎么打 西班牙海域挑战攻略大航海时代传说37级老船长怎么打 西班牙海域挑战攻略大航海时代传说37级老船长怎么打 西班牙海域挑战攻略

    在《大航海时代传说》中,挑战西班牙海域的37级老船长是许多航海者面临的难题。想要顺利通过这一关卡,关键并不在于提升战力硬拼,而是运用合理的战术逐步瓦解敌方舰队。切游小编带来了详细的通关技巧,助你轻松应对这场海战。 战斗初始阶段,推荐采用“边打边撤”的策略。先用远程炮击骚扰位于编队边缘的敌舰,引诱其脱…

    2026年10月8日 • 用户投稿
    000
  • 鼠标右键菜单中没有新建word文档怎么办

    鼠标右键菜单中没有新建word文档怎么办鼠标右键菜单中没有新建word文档怎么办鼠标右键菜单中没有新建word文档怎么办鼠标右键菜单中没有新建word文档怎么办

    大家都知道,鼠标右键菜单中通常会有很多实用的快捷选项,例如“新建 word 文档”。但最近有用户反馈,发现右键菜单里这个选项不见了,该怎么办呢?别担心,下面教你如何快速恢复。 操作步骤如下: 按下键盘上的 Win + R 组合键,打开“运行”窗口,在输入框中键入“regedit”,然后按回车确认。 …

    2026年10月8日 • 用户投稿
    800
  • 怎么查看linux是不是万兆网

    怎么查看linux是不是万兆网怎么查看linux是不是万兆网怎么查看linux是不是万兆网怎么查看linux是不是万兆网

    查看linux是不是万兆网的方法:1、通过ethtool和lspci命令查看网卡是千兆还是万兆网卡;2、通过ifconfig命令查看机器网络端口,然后执行“sudo ethtool eno1”命令查看网络带宽是千兆还是万兆即可。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 怎么查…

    2026年10月8日 • 用户投稿
    100
  • 哔哩哔哩动画观看入口-哔哩哔哩B站在线视频地址

    哔哩哔哩动画观看入口-哔哩哔哩B站在线视频地址哔哩哔哩动画观看入口-哔哩哔哩B站在线视频地址哔哩哔哩动画观看入口-哔哩哔哩B站在线视频地址哔哩哔哩动画观看入口-哔哩哔哩B站在线视频地址

    哔哩哔哩动画观看入口地址是https://www.bilibili.com,平台汇聚用户原创动画解说、二次创作、独立工作室短片及国产动画作品,涵盖MAD、AMV等多种形式;通过弹幕互动、多画质切换、分段标记和互动节点增强观看体验;并提供创作激励、新手教程、API接口与主题赛事支持创作者发展。 哔哩哔…

    2026年10月8日 • 用户投稿
    200
  • 文件删除失败被其他程序占用怎么办

    文件删除失败被其他程序占用怎么办文件删除失败被其他程序占用怎么办文件删除失败被其他程序占用怎么办文件删除失败被其他程序占用怎么办

    大家平时难免会遇到需要删除文件或文件夹的情况,但有些朋友在操作时却收到“删除失败,文件被其他程序占用”的提示,令人头疼。别担心,这个问题有办法解决,一起来了解下具体操作。 方法/步骤: 同时按下键盘上的 Win + R 键,打开“运行”窗口,输入“msconfig”,然后按回车键确认。 进入系统配置…

    2026年10月8日 • 用户投稿
    100
  • 录音软件添加背景音乐教程

    录音软件添加背景音乐教程录音软件添加背景音乐教程录音软件添加背景音乐教程录音软件添加背景音乐教程

    想要在录制人声时增强听觉体验,可以借助录音工具导入背景音乐,并合理调节音量平衡,营造更具感染力的音频效果。操作步骤如下: 1、 在手机上安装“录音专家”应用程序 2、 启动应用中的录音管家功能,先录制一段自己的语音内容 3、 找到刚录制的音频文件,点击右侧三个点图标,在弹出选项中选择“添加背景音乐”…

    2026年10月8日 • 用户投稿
    100
  • 告别TYPO3错误追踪噩梦:如何使用Composer和SentryClient实现高效错误监控

    告别TYPO3错误追踪噩梦:如何使用Composer和SentryClient实现高效错误监控告别TYPO3错误追踪噩梦:如何使用Composer和SentryClient实现高效错误监控告别TYPO3错误追踪噩梦:如何使用Composer和SentryClient实现高效错误监控告别TYPO3错误追踪噩梦:如何使用Composer和SentryClient实现高效错误监控

    可以通过一下地址学习composer:学习地址 告别TYPO3错误追踪噩梦:从被动到主动的转变 作为TYPO3开发者,你是否也曾经历过这样的场景:深夜接到用户反馈网站出现问题,然后你不得不远程登录服务器,在茫茫日志文件中翻找异常信息,试图还原问题现场?又或者,一个偶发的异常在后台日志里躺了很久,直到…

    2026年10月8日 • 用户投稿
    100
  • MySQL表设计教程:创建一个简单的问卷调查表

    mysql表设计教程:创建一个简单的问卷调查表 在数据存储和管理方面,MySQL是一种常用的关系型数据库管理系统。为了更好地理解MySQL表的设计过程,我们将以创建一个简单的问卷调查表为例进行讲解。 首先,我们需要创建一个数据库来存储我们的问卷调查数据。假设我们的数据库名为survey_db,我们可…

    2026年10月8日
    000
  • linux怎么查看php是否运行

    linux怎么查看php是否运行linux怎么查看php是否运行linux怎么查看php是否运行linux怎么查看php是否运行

    linux查看php是否运行的方法:1、登录linux系统,进入终端;2、通过执行“ps -ef | grep php”命令或者“ps -A | grep -i php”命令查看php是否启动即可。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 linux怎么查看php是否运行? …

    2026年10月8日 • 用户投稿
    000
  • 即梦ai如何导出4K视频 即梦ai超清分辨率设置攻略

    即梦ai如何导出4K视频 即梦ai超清分辨率设置攻略即梦ai如何导出4K视频 即梦ai超清分辨率设置攻略即梦ai如何导出4K视频 即梦ai超清分辨率设置攻略即梦ai如何导出4K视频 即梦ai超清分辨率设置攻略

    在即梦ai中可以导出4k视频,通过调整超清分辨率设置实现。1.在项目设置中选择“3840×2160”分辨率。2.在“导出”菜单中选择“视频”格式并设置“分辨率”为“源”。3.进入“视频设置”菜单,调整“超清分辨率”至“4k”。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限…

    2026年10月8日 • 用户投稿
    000
  • Java中编译时注解处理的技术原理与应用详解

    Java中编译时注解处理的技术原理与应用详解Java中编译时注解处理的技术原理与应用详解Java中编译时注解处理的技术原理与应用详解Java中编译时注解处理的技术原理与应用详解

    编译时注解处理是在java编译阶段由特定处理器对注解进行解析和响应的过程,用于生成代码或资源文件,不影响运行时性能;其核心组件包括注解定义、abstractprocessor处理器、processingenvironment工具类和roundenvironment轮次信息;流程为:编译器扫描注解、匹…

    2026年10月8日 • 用户投稿
    000
  • 心动小镇凯茜挑战怎么过 起跳顶泡泡任务详细攻略

    心动小镇凯茜挑战怎么过 起跳顶泡泡任务详细攻略心动小镇凯茜挑战怎么过 起跳顶泡泡任务详细攻略心动小镇凯茜挑战怎么过 起跳顶泡泡任务详细攻略心动小镇凯茜挑战怎么过 起跳顶泡泡任务详细攻略

    心动小镇中的起跳顶泡泡挑战是一项极具趣味性的特色玩法,其中凯茜布置的“超级难”任务让许多玩家感到棘手。该任务坐落于地图东南区域的森林地带,要求玩家连续三次成功顶破空中泡泡,过程中还有机会获得稀有的溜溜橡木材料。 任务地点与前往方式 凯茜的位置较为隐蔽,她栖身于一座建在巨树之间的空中天桥上。抵达该区域…

    2026年10月8日 • 用户投稿
    400
  • MySQL表设计实战:创建一个图片管理表和相册表

    mysql表设计实战:创建一个图片管理表和相册表 在实际应用中,图片管理和相册管理是一个常见的需求。在本文中,我们将一起探讨如何通过MySQL来设计和创建一个图片管理表和相册表。 首先,我们来创建一个图片管理表。这个表将存储图片的相关信息,例如图片的ID、名称、描述、上传时间等。 CREATE TA…

    2026年10月8日
    000

发表回复

登录后才能评论
关注微信