svg-icon-best-practice
npx skills add https://github.com/forge-town/skills --skill svg-icon-best-practice
Agent 安装分布
Skill 文档
SVG 徿 管çè§è
ä»»å¡ç®æ
- æ¬ Skill ç¨äºï¼ç»ä¸ React TypeScript 项ç®ä¸ SVG 徿 çåå¨ãå°è£ åä½¿ç¨æ¹å¼
- è½åå å«ï¼SVG 转æ¢ä¸º React ç»ä»¶ã徿 è¿ç§»æµç¨ã使ç¨è§è说æ
- è§¦åæ¡ä»¶ï¼ç¨æ·é覔ç»ä¸ç®¡ç SVG 徿 ”ã”éæå¾æ ä»£ç ”ã”åå»ºå¾æ è§è”ã”è¿ç§»å è SVG”
åç½®åå¤
- ä¾èµè¯´æï¼æ å¤é¨ä¾èµï¼ä½¿ç¨ React + TypeScript å ç½®è½å
- ç®å½ç»æåå¤ï¼ç¡®ä¿é¡¹ç®ä¸åå¨
components/ç®å½ï¼å建components/icons/åç®å½mkdir -p src/components/icons
æä½³å®è·µç¤ºä¾ï¼åè best-practice-examples/ ç®å½ä¸çå®é 项ç®ç¤ºä¾
best-practice-examples/assets/– ä¸å¡ç»ä»¶ç¤ºä¾best-practice-examples/components/icons/– 徿 ç»ä»¶ç¤ºä¾
å¿«éå¼å§ï¼ç»æºè½ä½çæ§è¡æä»¤ï¼
å½ç¨æ·è¦æ±”å°å è SVG æ½ç¦»”æ”ç»ä¸ç®¡ç徿 ”æ¶ï¼æºè½ä½åºæä»¥ä¸æ¥éª¤æ§è¡ï¼
æ¥éª¤ 1ï¼æ«æå¹¶è¯å«å¾æ
1. ä½¿ç¨ glob_file æ grep_file æç´¢é¡¹ç®ä¸ææç .tsx/.jsx æä»¶
2. å¨è¿äºæä»¶ä¸æç´¢å
å« <svg> æ ç¾ç代ç
3. è®°å½æææ¾å°çå
è SVG ä½ç½®ï¼æä»¶è·¯å¾ãè¡å·ï¼
4. 读åè¿äºæä»¶ï¼æå宿´ç SVG 代ç
æ¥éª¤ 2ï¼åå»ºå¾æ ç»ä»¶
1. å¯¹äºæ¯ä¸ªæåç SVGï¼
- ç¡®å®å¾æ åè½ï¼çæåéçç»ä»¶åï¼PascalCaseï¼
- å¨ src/components/icons/ ç®å½å建对åºç .tsx æä»¶
- æç
§ icon-component-template.md çæ¨¡æ¿ç¼åç»ä»¶ä»£ç
- ç¡®ä¿å
å« TypeScript ç±»åå®ä¹
æ¥éª¤ 3ï¼æ´æ°ä¸å¡ç»ä»¶
1. å¯¹äºæ¯ä¸ªå
å«å
è SVG çæä»¶ï¼
- æ·»å import è¯å¥å¯¼å
¥æ°å建ç徿 ç»ä»¶
- å é¤åæç <svg> æ ç¾
- æ¿æ¢ä¸º <IconName /> ç»ä»¶è°ç¨
- è¿ç§»åå§ç屿§ï¼widthãheightãfill çï¼
æ¥éª¤ 4ï¼éªè¯å®æ
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/ç®å½
ç¤ºä¾æä½ï¼
è¾å
¥ï¼ä» 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
- æ§è¡å®æ´å彿µè¯