首页 › Skills专栏 › 产品经理工作流skills › 打通 Figma 原型与前端代码自动同步

打通 Figma 原型与前端代码自动同步

效果直接看下面的图片​

​

飞书文档 - 图片

​

截图里能看到整个链路:​

左上角是 Figma 设计稿,左侧终端里 Claude Code 在自动识别图片素材​

中间是tinypng压缩 + 上传 COS 的过程​

右上角 COS 控制台里文件已经上传成成功,右下角是小程序里的最终效果​

Skill 是个什么东西​

简单说,Skill 就是一个文件夹,放在 .codex/skills/ 下面,里面告诉 Codex 怎么完成某个特定任务。​

Codex 本身能读代码、写代码、跑命令,但它不知道你们项目的图片要传到哪个 COS Bucket,不知道 PNG 要先压缩,不知道上传路径的前缀规则。这些"项目私货",你得自己教它。Skill 就是干这个的。​

目录结构长这样:​

​

代码块​

Bash

.claude/skills/image-auto-upload/​

├── SKILL.md # 给 Claude 看的操作手册​

├── README.md # 给人看的使用文档​

├── resources/ # 放待上传的图片​

│ └── README.md​

└── scripts/ # 执行脚本​

├── upload_images.cjs # Node.js 上传脚本​

└── compress_png.py # Python 压缩脚本​

​

​

最核心的是 SKILL.md。Codex 读这个文件来理解:什么时候该用这个技能、具体怎么操作、调什么脚本、结果怎么展示。​

​

SKILL.md 怎么写​

触发场景​

​

代码块​

Markdown

​

两种触发方式。一种是实现 Figma 设计稿时 Claude 自己发现有图片,会先问你要不要上传;另一种是你直接说"上传图片",它立刻执行。​

我一开始只写了第二种,后来发现配合 Figma Agent 用的时候,Claude 不知道该主动处理图片,还得我手动提醒。加上第一种之后就顺畅了。​

处理流程​

​

代码块​

Objective-C

​

几个设计上的考虑:​

•

PNG 先过 TinyPNG API 压缩再传,JPG/WebP 直接传。PNG 压缩率一般在 60%-80%,省的流量还是挺可观的​

•

.DS_Store 之类的杂文件自动跳过,不用手动清理​

•

传完自动删源文件。一开始我没加这个,resources 目录越来越大,后来加了自动清理​

输出格式​

​

代码块​

Markdown

| 图片名称 | CDN URL |​

​

​

两个脚本,一个压缩一个传​

PNG 压缩(compress_png.py)​

​

代码块​

Python

import tinify​

​

def compress_image(input_path, output_path=None):​

tinify.key = TINYPNG_API_KEY # 从 .env.skills 读取​

​

input_size = input_file.stat().st_size​

source = tinify.from_file(str(input_file))​

source.to_file(str(output_path)) # 压缩后覆盖原文件​

​

逻辑很直白:读文件、调 TinyPNG API、写回去覆盖原文件。TinyPNG 免费额度每月 500 次,个人项目完全够用。​

COS 上传(upload_images.cjs)​

​

代码块​

JavaScript

const COS = require('cos-nodejs-sdk-v5');​

​

// 上传单个文件(分片上传)​

function uploadFile(filePath, key) {​

// 1. 初始化分片上传​

cos.multipartInit({ Bucket, Region, Key }, (err, data) => {​

// 2. 上传分片​

cos.multipartUpload({ ... Body: fs.createReadStream(filePath) }, () => {​

// 3. 完成上传​

​

用了 COS SDK 的分片上传,支持递归子目录。上传成功删源文件,失败的留着方便重试。​

密钥放哪​

COS 密钥和 TinyPNG API Key 放在项目根目录的 .env.skills 里:​

​

代码块​

Bash

​

这个文件不进 Git,密钥不会泄露。​

​

配合 Figma 用​

我项目里还有个 figma-designer Agent,配置里写了一条:​

​

代码块​

Markdown

markdown​

代码解读​

​

所以流程是这样的:​

我在 Figma 里选中要实现的页面​

在 Claude Code 里说"根据 Figma 设计稿实现这个页面"​

Claude 通过 Figma MCP 读设计稿,识别出图片素材​

自动导出图片 → 压缩 PNG → 传 COS → 拿到 CDN URL​

用 URL 替换代码里的图片引用,生成 Vue 组件​

我只管最后看一眼代码对不对。中间图片那一堆事,完全不用管。​

说实话第一次跑通的时候还挺意外的,没想到几个工具串起来能这么顺。​

手动传几张图​

有时候设计师单独丢几张图过来,不走 Figma 流程:​

​

代码块​

SCSS

​

批量传一整套图​

比如一次性传一套图标:​

​

代码块​

Plain Text

resources/​

├── icons/​

│ ├── home.png​

│ ├── cart.png​

│ └── user.png​

└── backgrounds/​

├── login-bg.jpg​

└── main-bg.jpg​

​

上传后目录结构原样保留:​

​

代码块​

Bash

applet/icons/home.png​

applet/icons/cart.png​

applet/icons/user.png​

applet/backgrounds/login-bg.jpg​

applet/backgrounds/main-bg.jpg​

​

这个我踩过坑。一开始上传脚本不支持子目录,所有文件都平铺到根路径下,文件名一冲突就覆盖了。后来加了递归目录支持才解决。​

想自己搞一个?照着来​

建目录​

​

代码块​

Bash

​

装依赖​

​

代码块​

Bash

# PNG 压缩​

pip install tinify​

​

# COS 上传​

npm install cos-nodejs-sdk-v5​

​

配环境变量​

项目根目录建 .env.skills:​

​

代码块​

Bash

COS_BUCKET=your-bucket-name​

​

写 SKILL.md​

这步最花时间,也最值得花时间。几个经验:​

触发场景写清楚,不然 Claude 不知道什么时候该用​

流程用流程图或步骤列表,别写大段文字​

命令给完整的,能直接复制执行的那种​

定义好输出格式,不然每次返回的结果格式都不一样​

我第一版 SKILL.md 写得太简略,Claude 经常漏步骤。后来补了流程图和具体命令,就稳定多了。​

加 .gitignore​

​

代码块​

Bash

echo ".env.skills" >> .gitignore​

​