关于 figma-code-connect-components
figma-code-connect-components 是一项技能,通过 Code Connect 将已发布的 Figma 组件映射到代码库中的对应组件。它涵盖发现、代码匹配、用户选择和创建映射,并要求连接 Figma MCP 服务。
主要功能
- 01查找未映射的已发布组件
- 02按结构和属性搜索代码匹配项
- 03呈现候选映射供用户选择
- 04批量创建已批准的映射
- 05支持 Figma URL 或桌面端选择
适用场景
- 01将设计系统按钮关联到代码组件
- 02映射多个选定的 Figma 组件
- 03关联前比较多个代码候选项
- 04识别代码库中没有匹配项的组件
MCP 相关
通过已连接的 Figma MCP 服务获取 Code Connect 建议并提交已批准的映射。使用 figma-desktop MCP 时,可直接采用当前选中的节点,无需 URL。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ openai/ skills --skill figma-code-connect-components安装后在 Claude Code 中输入/figma-code-connect-components确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSE.TXTagents/openai.yamlassets/figma-small.svgicon.svgreferences/mapping-checklist.mdscripts/normalize_node_id.py详细介绍
Code Connect 组件
概述
此技能可帮助你使用 Figma 的 Code Connect 功能,将 Figma 设计组件与对应的代码实现关联起来。它会分析 Figma 设计结构,在代码库中搜索匹配的组件,并建立映射,以保持设计与代码的一致性。
技能边界
- 将此技能用于
get_code_connect_suggestions+send_code_connect_mappings工作流。 - 如果任务需要通过 Plugin API 脚本写入 Figma 画布,请切换到 figma-use。
- 如果任务是根据代码或描述在 Figma 中构建或更新完整页面,请切换到 figma-generate-design。
- 如果任务是根据 Figma 实现产品代码,请切换到 figma-implement-design。
前提条件
- 必须连接并能够访问 Figma MCP 服务
- 用户必须提供包含节点 ID 的 Figma URL:
https://figma.com/design/:fileKey/:fileName?node-id=1-2- 重要: Figma URL 必须包含
node-id参数。没有该参数,Code Connect 映射将失败。
- 重要: Figma URL 必须包含
- 或者使用
figma-desktopMCP 时:用户可以直接在 Figma 桌面应用中选择节点(无需 URL) - 重要: Figma 组件必须已发布到团队库。Code Connect 仅适用于已发布的组件或组件集。
- 重要: Code Connect 仅适用于 Organization 和 Enterprise 方案。
- 可访问用于扫描组件的项目代码库
必需工作流
请按顺序执行以下步骤。不要跳过任何步骤。
步骤 1:获取 Code Connect 建议
调用 get_code_connect_suggestions,一次性识别所有未映射的组件。此工具会自动:
- 从 Figma 场景图中获取组件信息
- 识别所选内容中已发布的组件
- 检查现有的 Code Connect 映射,并过滤掉已连接的组件
- 返回每个未映射组件的名称、属性和缩略图
选项 A:使用 figma-desktop MCP(未提供 URL)
如果已连接 figma-desktop MCP 服务,且用户未提供 Figma URL,请立即调用 get_code_connect_suggestions。无需解析 URL——桌面 MCP 服务会自动使用已打开 Figma 文件中当前选中的节点。
注意: 用户必须打开 Figma 桌面应用并选中一个节点。无需传递 fileKey 参数——服务会使用当前打开的文件。
选项 B:已提供 Figma URL
从 URL 中解析出 fileKey 和 nodeId,然后调用 get_code_connect_suggestions。
重要: 从 Figma URL 中提取节点 ID 时,请转换格式:
- URL 格式使用连字符:
node-id=1-2 - 工具要求使用冒号:
nodeId=1:2
解析 Figma URL:
- URL 格式:
https://figma.com/design/:fileKey/:fileName?node-id=1-2 - 提取文件密钥:
:fileKey(/design/后的路径段) - 从 URL 中提取节点 ID:
1-2,然后转换为工具所需的1:2
get_code_connect_suggestions(fileKey=":fileKey", nodeId="1:2")
处理响应:
- 如果工具返回 "No published components found in this selection" → 告知用户并停止。组件可能需要先发布到团队库。
- 如果工具返回 "All component instances in this selection are already connected to code via Code Connect" → 告知用户所有内容都已完成映射。
- 否则,响应中会包含未映射组件的列表,每个组件都包含:
- 组件名称
- 节点 ID
- 组件属性(包含属性名称和值的 JSON)
- 组件缩略图(用于目视检查)
步骤 2:扫描代码库,查找匹配的组件
对于 get_code_connect_suggestions 返回的每个未映射组件,请在代码库中搜索匹配的代码组件。
查找内容:
- 与 Figma 组件名称相同或相似的组件名称
- 与 Figma 层级结构一致的组件结构
- 与 Figma 属性(变体、文本、样式)相对应的属性
- 常见组件目录中的文件(
src/components/、components/、ui/等)
搜索策略:
- 搜索名称匹配的组件文件
- 阅读候选文件,检查其结构和属性
- 将代码组件的属性与步骤 1 返回的 Figma 组件属性进行比较
- 检测编程语言(TypeScript、JavaScript)和框架(React、Vue 等)
- 根据结构相似度确定最佳匹配,重点考虑:
- 属性名称及其与 Figma 属性的对应关系
- 与 Figma 默认值匹配的默认值
- CSS 类或样式对象
- 能阐明用途的说明性注释
- 如果有多个同样合适的候选项,选择属性接口最匹配的候选项,并在调用工具前用 1-2 句话的注释说明理由
搜索模式示例:
- 如果 Figma 组件为“PrimaryButton”,请搜索
Button.tsx、PrimaryButton.tsx、Button.jsx - 检查常见组件路径:
src/components/、app/components/、lib/ui/ - 查找与 Figma 变体匹配的变体属性,例如
variant、size、color
步骤 3:向用户展示匹配结果
展示你的查找结果,让用户选择要创建哪些映射。用户可以接受全部、部分或不接受任何建议的映射。
按以下格式展示匹配结果:
The following components match the design:
- [ComponentName](path/to/component): DesignComponentName at nodeId [nodeId](figmaUrl?node-id=X-Y)
- [AnotherComponent](path/to/another): AnotherDesign at nodeId [nodeId2](figmaUrl?node-id=X-Y)
Would you like to connect these components? You can accept all, select specific ones, or skip.
如果找不到组件的完全匹配项:
- 展示最接近的 2 个候选项
- 说明它们之间的差异
- 请用户确认要使用哪个组件,或提供正确路径
如果用户拒绝所有映射,请告知用户并停止。无需调用后续工具。
步骤 4:创建 Code Connect 映射
用户确认选择后,仅将已接受的映射传递给 send_code_connect_mappings。此工具会在一次调用中批量创建所有映射。
示例:
send_code_connect_mappings(
fileKey=":fileKey",
nodeId="1:2",
mappings=[
{ nodeId: "1:2", componentName: "Button", source: "src/components/Button.tsx", label: "React" },
{ nodeId: "1:5", componentName: "Card", source: "src/components/Card.tsx", label: "React" }
]
)
每个映射的关键参数:
nodeId:Figma 节点 ID(冒号格式:1:2)componentName:要连接的组件名称(例如,“Button”“Card”)source:代码组件文件的路径(相对于项目根目录)label:此 Code Connect 映射的框架或语言标签。有效值包括:- Web:'React'、'Web Components'、'Vue'、'Svelte'、'Storybook'、'Javascript'
- iOS:'Swift UIKit'、'Objective-C UIKit'、'SwiftUI'
- Android:'Compose'、'Java'、'Kotlin'、'Android XML Layout'
- 跨平台:'Flutter'
- 文档:'Markdown'
调用后:
- 成功时:工具会确认映射已创建
- 出错时:工具会报告具体哪些映射创建失败及原因(例如,“组件已映射到代码”“未找到已发布的组件”“权限不足”)
处理完成后,提供摘要:
Code Connect Summary:
- Successfully connected: 3
- Button (1:2) → src/components/Button.tsx
- Card (1:5) → src/components/Card.tsx
- Input (1:8) → src/components/Input.tsx
- Could not connect: 1
- CustomWidget (1:10) - No matching component found in codebase
示例
示例 1:连接按钮组件
用户说:“将这个 Figma 按钮连接到我的代码:https://figma.com/design/kL9xQn2VwM8pYrTb4ZcHjF/DesignSystem?node-id=42-15”
操作:
-
解析 URL:fileKey=
kL9xQn2VwM8pYrTb4ZcHjF,nodeId=42-15→ 转换为42:15 -
运行
get_code_connect_suggestions(fileKey="kL9xQn2VwM8pYrTb4ZcHjF", nodeId="42:15") -
响应显示:Button 组件(未映射),包含
variant(primary/secondary)和size(sm/md/lg)属性,以及一张缩略图 -
在代码库中搜索 Button 组件:找到
src/components/Button.tsx -
读取
Button.tsx,确认它有variant和size属性 -
向用户展示:
I found a match: - [Button](src/components/Button.tsx): Button at nodeId [42:15](https://figma.com/design/kL9xQn2VwM8pYrTb4ZcHjF/DesignSystem?node-id=42-15) Would you like to connect this component? -
用户确认:“是”
-
检测到这是一个 TypeScript React 组件
-
运行
send_code_connect_mappings(fileKey="kL9xQn2VwM8pYrTb4ZcHjF", nodeId="42:15", mappings=[{ nodeId: "42:15", componentName: "Button", source: "src/components/Button.tsx", label: "React" }])
**结果:**Figma 按钮组件现在已连接到代码中的 Button 组件。
示例 2:多个组件与部分选择
用户说:“连接此画框中的组件:https://figma.com/design/pR8mNv5KqXzGwY2JtCfL4D/Components?node-id=10-50”
操作:
-
解析 URL:fileKey=
pR8mNv5KqXzGwY2JtCfL4D,nodeId=10-50→ 转换为10:50 -
运行
get_code_connect_suggestions(fileKey="pR8mNv5KqXzGwY2JtCfL4D", nodeId="10:50") -
响应显示 3 个未映射组件:ProductCard、Badge 和 CustomWidget
-
在代码库中搜索:
- ProductCard:找到
src/components/ProductCard.tsx(属性匹配) - Badge:找到
src/components/Badge.tsx(属性匹配) - CustomWidget:未找到匹配组件
- ProductCard:找到
-
向用户展示:
The following components match the design: - [ProductCard](src/components/ProductCard.tsx): ProductCard at nodeId [10:51](https://figma.com/design/pR8mNv5KqXzGwY2JtCfL4D/Components?node-id=10-51) - [Badge](src/components/Badge.tsx): Badge at nodeId [10:52](https://figma.com/design/pR8mNv5KqXzGwY2JtCfL4D/Components?node-id=10-52) I couldn't find a match for CustomWidget (10:53). Would you like to connect these components? You can accept all, select specific ones, or skip. -
用户说:“只连接 ProductCard,Badge 暂时跳过”
-
运行
send_code_connect_mappings(fileKey="pR8mNv5KqXzGwY2JtCfL4D", nodeId="10:50", mappings=[{ nodeId: "10:51", componentName: "ProductCard", source: "src/components/ProductCard.tsx", label: "React" }])
**结果:**仅按用户的选择连接 ProductCard。
示例 3:需要创建组件
用户说:“连接这个图标:https://figma.com/design/8yJDMeWDyBz71EnMOSuUiw/Icons?node-id=5-20”
操作:
- 解析 URL:fileKey=
8yJDMeWDyBz71EnMOSuUiw,nodeId=5-20→ 转换为5:20 - 运行
get_code_connect_suggestions(fileKey="8yJDMeWDyBz71EnMOSuUiw", nodeId="5:20") - 响应显示:CheckIcon 组件(未映射),包含颜色和大小属性
- 在代码库中搜索 CheckIcon:未找到匹配项
- 搜索通用 Icon 组件:找到包含其他图标的
src/icons/目录 - 向用户说明:“我找不到 CheckIcon 组件,但找到了
src/icons/图标目录。你想要:- 先创建一个新的 CheckIcon.tsx 组件,然后连接它
- 连接到其他现有图标
- 提供 CheckIcon 的路径(如果它位于其他位置)”
- 用户提供路径:“src/icons/CheckIcon.tsx”
- 检测文件使用的语言和框架
- 运行
send_code_connect_mappings(fileKey="8yJDMeWDyBz71EnMOSuUiw", nodeId="5:20", mappings=[{ nodeId: "5:20", componentName: "CheckIcon", source: "src/icons/CheckIcon.tsx", label: "React" }])
**结果:**CheckIcon 组件已成功连接到 Figma 设计。
最佳实践
主动发现组件
不要只向用户询问文件路径——主动搜索他们的代码库,查找匹配的组件。这样能带来更好的体验,并发现潜在的映射机会。
准确匹配结构
比较 Figma 组件与代码组件时,不要只看名称。请检查:
- 属性是否匹配(variant 类型、大小选项等)
- 组件层级是否匹配(嵌套元素)
- 组件用途是否相同
清晰沟通
提出创建映射时,请清楚说明:
- 找到了什么
- 为什么它们匹配
- 映射会产生什么效果
- 属性将如何连接
处理歧义
如果可能匹配多个组件,请列出选项,而不要猜测。让用户最终决定要连接哪个组件。
优雅降级
如果找不到完全匹配的组件,请提供有帮助的后续步骤:
- 显示相近的候选项
- 建议创建组件
- 请用户提供指导
常见问题与解决方案
问题:"No published components found in this selection"
原因: Figma 组件尚未发布到团队库。Code Connect 仅适用于已发布的组件。 解决方案: 用户需要在 Figma 中将组件发布到团队库:
- 在 Figma 中,选择组件或组件集
- 右键单击并选择 "Publish to library",或使用 Team Library 发布对话框
- 发布组件
- 发布后,使用相同的 node ID 重试 Code Connect 映射
问题:"Code Connect is only available on Organization and Enterprise plans"
原因: 用户的 Figma 方案不包含 Code Connect 访问权限。 解决方案: 用户需要升级到 Organization 或 Enterprise 方案,或联系管理员。
问题:代码库中未找到匹配的组件
原因: 代码库搜索未找到名称或结构匹配的组件。 解决方案: 询问用户该组件是否使用其他名称,或位于其他位置。用户可能需要先创建该组件,也可能是因为组件位于意料之外的目录中。
问题:"Published component not found" (CODE_CONNECT_ASSET_NOT_FOUND)
原因: 源文件路径不正确、该位置不存在组件,或 componentName 与实际导出内容不匹配。 解决方案: 确认源路径正确且相对于项目根目录。检查组件是否已从文件中正确导出,并且导出名称与指定的 componentName 完全一致。
问题:"Component is already mapped to code" (CODE_CONNECT_MAPPING_ALREADY_EXISTS)
原因: 此组件已存在 Code Connect 映射。 解决方案: 该组件已连接。如果用户想更新映射,可能需要先在 Figma 中移除现有映射。
问题:"Insufficient permissions to create mapping" (CODE_CONNECT_INSUFFICIENT_PERMISSIONS)
原因: 用户没有该 Figma 文件或库的编辑权限。 解决方案: 用户需要拥有包含该组件的文件的编辑权限。请联系文件所有者或团队管理员。
问题:Code Connect 映射因 URL 错误而失败
原因: Figma URL 格式不正确,或缺少 node-id 参数。
解决方案: 确认 URL 符合所需格式:https://figma.com/design/:fileKey/:fileName?node-id=1-2。必须包含 node-id 参数。还要确保在调用工具时将 1-2 转换为 1:2。
问题:找到多个相似组件
原因: 代码库中存在多个可能匹配 Figma 组件的组件。
解决方案: 向用户列出所有候选项及其文件路径,让用户选择要连接的组件。不同组件可能用于不同场景(例如,Button.tsx 和 LinkButton.tsx)。
了解 Code Connect
Code Connect 在设计和代码之间建立双向链接:
对于设计师: 查看哪个代码组件实现了 Figma 组件 对于开发者: 从 Figma 设计直接跳转到实现它们的代码 对于团队: 为组件映射维护单一事实来源
创建的映射可明确并公开这些关联,帮助设计和代码保持同步。
更多资源
如需详细了解 Code Connect: