SVG 图标管理规范
任务目标
- •本 Skill 用于:统一 React TypeScript 项目中 SVG 图标的存储、封装和使用方式
- •能力包含:SVG 转换为 React 组件、图标迁移流程、使用规范说明
- •触发条件:用户需要"统一管理 SVG 图标"、"重构图标代码"、"创建图标规范"、"迁移内联 SVG"
前置准备
- •依赖说明:无外部依赖,使用 React + TypeScript 内置能力
- •目录结构准备:确保项目中存在
components/目录,创建components/icons/子目录bashmkdir -p src/components/icons
最佳实践示例:参考 best-practice-examples/ 目录下的实际项目示例
- •
best-practice-examples/assets/- 业务组件示例 - •
best-practice-examples/components/icons/- 图标组件示例
快速开始(给智能体的执行指令)
当用户要求"将内联 SVG 抽离"或"统一管理图标"时,智能体应按以下步骤执行:
步骤 1:扫描并识别图标
code
1. 使用 glob_file 或 grep_file 搜索项目中所有的 .tsx/.jsx 文件 2. 在这些文件中搜索包含 <svg> 标签的代码 3. 记录所有找到的内联 SVG 位置(文件路径、行号) 4. 读取这些文件,提取完整的 SVG 代码
步骤 2:创建图标组件
code
1. 对于每个提取的 SVG: - 确定图标功能,生成合适的组件名(PascalCase) - 在 src/components/icons/ 目录创建对应的 .tsx 文件 - 按照 icon-component-template.md 的模板编写组件代码 - 确保包含 TypeScript 类型定义
步骤 3:更新业务组件
code
1. 对于每个包含内联 SVG 的文件: - 添加 import 语句导入新创建的图标组件 - 删除原有的 <svg> 标签 - 替换为 <IconName /> 组件调用 - 迁移原始的属性(width、height、fill 等)
步骤 4:验证完成
code
1. 确认所有内联 SVG 都已替换为组件 2. 确认所有图标组件都保存在 src/components/icons/ 目录 3. 确认所有组件文件名和命名符合规范 4. 确认 TypeScript 编译无错误
操作步骤
1. 创建图标目录结构
在项目根目录执行以下操作:
- •创建
components/icons/目录(如果不存在) - •该目录将存放所有图标组件
2. 提取并封装 SVG 为 React 组件
2.1 识别并读取需要迁移的图标
执行步骤:
- •使用文件搜索工具查找项目中所有
.tsx和.jsx文件 - •在这些文件中搜索内联的
<svg>标签 - •记录所有包含内联 SVG 的文件路径和行号
- •读取这些文件,提取完整的 SVG 代码
- •识别每个 SVG 的用途(按钮图标、导航图标等)
关键检查点:
- • 已定位所有内联 SVG 的位置
- • 已记录每个 SVG 的上下文用途
- • 已提取完整的 SVG 代码(包括 viewBox、path 等)
2.2 转换 SVG 为 React 组件
执行步骤: 对于每个提取的 SVG,执行以下操作:
- •读取并解析 SVG 代码:获取完整的
<svg>标签及其内容 - •转换文件名:将原始文件名或功能描述转换为 PascalCase 格式
- •创建组件文件:在
src/components/icons/目录下创建.tsx文件 - •编写组件代码:参考 references/icon-component-template.md,按照模板编写组件
- •保存文件:将创建的组件保存到
src/components/icons/目录
示例操作:
code
输入:从 Button.tsx 提取的箭头 SVG ↓ 步骤 1:读取 SVG 代码 <svg viewBox="0 0 24 24"><path d="..." /></svg> ↓ 步骤 2:转换文件名 ArrowRight ↓ 步骤 3:创建 src/components/icons/ArrowRight.tsx ↓ 步骤 4:参考模板编写组件代码 ↓ 步骤 5:保存文件
完整模板和示例: 详见 references/icon-component-template.md
3. 更新业务组件
3.1 替换内联 SVG
执行步骤: 对于每个包含内联 SVG 的业务组件:
- •定位内联 SVG 代码:找到组件中的
<svg>标签 - •记录原始属性:记下原有的 width、height、fill、className 等属性值
- •添加导入语句:在文件顶部添加
import IconName from '@/components/icons/IconName' - •替换 SVG 标签:删除
<svg>标签及其内容,替换为<IconName /> - •迁移属性:将原始属性作为 props 传递给新组件(如
<IconName width={24} height={24} />) - •验证功能:确认替换后组件功能和样式保持一致
3.2 使用封装的 Icon 组件
- •从
components/icons导入图标组件 - •按需传递 props(size、color 等)
- •支持通过 className 自定义样式
详细使用示例见 references/best-practice-examples.md
4. 图标迁移检查清单
完整的迁移检查清单详见 references/migration-checklist.md,包含:
- •迁移前环境检查
- •逐步迁移操作指南
- •迁移后功能验证
- •常见问题解决方案
5. 代码审查与规范检查
在完成迁移后,检查以下规范:
禁止场景:
- •❌ 禁止在业务组件内直接写 SVG 代码
- •❌ 禁止在 icons 目录外存放独立的 SVG 组件文件
- •❌ 禁止在非 components/icons 目录下创建图标组件
规范要求:
- •✅ 所有 SVG 图标必须封装为 React 组件
- •✅ 组件必须保存在
components/icons/目录下 - •✅ 必须从
components/icons导入使用 - •✅ 组件必须包含 TypeScript 类型定义
- •✅ 支持通过 props 配置常用属性
详细的规范要求详见各参考文档。
资源索引
- •最佳实践示例:见 best-practice-examples/(实际项目示例,包含 components 和 assets)
- •best-practice-examples/components/icons/ - 图标组件示例
- •best-practice-examples/assets/ - 业务组件示例
- •组件模板:见 references/icon-component-template.md(标准 React 图标组件模板、属性配置、常见变体)
- •迁移清单:见 references/migration-checklist.md(完整迁移检查项、问题解决方案)
- •最佳实践文档:见 references/best-practice-examples.md(基于实际项目的最佳实践和使用说明)
注意事项
- •仅在需要创建新的图标组件或迁移现有图标时读取参考文档
- •智能体已具备理解和转换 SVG 代码的能力,无需自动化脚本
- •转换时保留 SVG 的 viewBox 和 path 数据,确保图标形状不变
- •默认 fill="currentColor" 以支持通过 CSS 控制颜色
- •使用 TypeScript 确保类型安全,避免运行时错误
- •best-practice-examples/ 目录包含实际项目示例,可供参考
使用示例
场景 1:迁移现有内联 SVG
需求: 将 Button 组件中的内联箭头图标提取为独立组件
执行方式: 智能体手动执行
- •读取 Button 组件中的 SVG 代码
- •参考 references/icon-component-template.md 创建 ArrowRight.tsx
- •参考 best-practice-examples/components/icons/ 中的示例
- •替换 Button 组件中的内联 SVG
- •测试验证显示效果
场景 2:创建新图标规范
需求: 新项目需要建立图标管理规范
执行方式: 智能体自然语言指导
- •创建 components/icons/ 目录
- •参考 references/icon-component-template.md 创建图标组件
- •参考 best-practice-examples/components/icons/ 中的桶导出方式
- •在项目中推行统一的图标使用方式
场景 3:批量迁移图标
需求: 项目中有多个内联 SVG 需要统一迁移
执行方式: 智能体逐个处理
- •扫描识别所有内联 SVG 位置
- •按照 references/migration-checklist.md 逐个迁移
- •替换所有业务组件中的内联 SVG
- •执行完整回归测试