
一套从Figma到代码、再到云端部署的完整方案,让设计交付效率提升3倍,还原度达到98%
许多产品设计师(尤其是零基础入行者)交付设计稿后,前端开发需要手动切图、复制颜色值、测量间距,不仅耗时,还容易出错。本文面向零代码基础的设计师,手把手教你搭建一套基于腾讯云服务的设计资产自动化流水线,涵盖:
你将获得:一套可直接复制的代码模板 + 详细的部署步骤,以及对比数据证明效率提升。
设计Token是设计系统中最细粒度的原子变量,如颜色、字体大小、间距等。它们以JSON格式定义,是设计与开发之间的“桥梁”。
示例 tokens.json(后续会通过Figma自动生成):
{
"color": {
"primary": "#0052D9",
"success": "#00A870",
"warning": "#ED7B2F",
"neutral": {
"100": "#F3F3F3",
"900": "#1A1A1A"
}
},
"font": {
"family": "PingFang SC, Microsoft YaHei, sans-serif",
"size": {
"sm": "12px",
"base": "14px",
"lg": "16px"
}
},
"spacing": {
"xs": "4px",
"sm": "8px",
"md": "16px",
"lg": "24px"
}
}我们将Token文件上传至腾讯云COS,并通过CDN域名公开访问,使开发项目可直接通过URL引入(例如:https://cdn.example.com/tokens/v1/tokens.json)。
在Figma中,打开 Local Variables 面板,创建以下集合:
Colors(颜色)Typography(字体)Spacing(间距)为每个变量命名,例如 Colors/Primary、Spacing/MD。建议命名采用“/”分层,便于后续解析。
前置准备:
编写导出脚本 export-tokens.js:
const axios = require('axios');
const fs = require('fs');
const COS = require('cos-nodejs-sdk-v5');
// Figma配置
const FIGMA_TOKEN = '你的Personal Access Token';
const FILE_KEY = '你的文件Key';
// 腾讯云COS配置
const cos = new COS({
SecretId: '你的SecretId',
SecretKey: '你的SecretKey',
});
// 1. 获取Figma变量
async function fetchVariables() {
const url = `https://api.figma.com/v1/files/${FILE_KEY}/variables/local`;
const response = await axios.get(url, {
headers: { 'X-Figma-Token': FIGMA_TOKEN },
});
return response.data;
}
// 2. 解析为设计Token JSON格式
function parseVariables(variableData) {
// 简化逻辑:将Figma变量映射到我们的tokens结构
const tokens = { color: {}, font: {}, spacing: {} };
const { variables } = variableData;
for (const [id, variable] of Object.entries(variables)) {
const name = variable.name; // 如 "Colors/Primary"
const value = variable.valuesByMode[Object.keys(variable.valuesByMode)[0]]; // 取第一个Mode
// 根据name前缀分类
if (name.startsWith('Colors/')) {
const key = name.replace('Colors/', '').toLowerCase();
tokens.color[key] = value;
} else if (name.startsWith('Typography/')) {
// 类似处理
} else if (name.startsWith('Spacing/')) {
const key = name.replace('Spacing/', '').toLowerCase();
tokens.spacing[key] = value + 'px';
}
}
return tokens;
}
// 3. 上传至腾讯云COS
async function uploadToCOS(content, key) {
const bucket = 'your-bucket-1234567890';
const region = 'ap-shanghai';
return new Promise((resolve, reject) => {
cos.putObject({
Bucket: bucket,
Region: region,
Key: `tokens/${key}`,
Body: JSON.stringify(content, null, 2),
ContentType: 'application/json',
}, (err, data) => {
if (err) reject(err);
else resolve(data);
});
});
}
// 主流程
(async () => {
const raw = await fetchVariables();
const tokens = parseVariables(raw);
await uploadToCOS(tokens, 'latest/tokens.json');
// 同时保存版本号(如使用package.json的version)
console.log('Token导出并上传成功!');
})();运行脚本:
npm install axios cos-nodejs-sdk-v5
node export-tokens.js说明:该脚本会自动将最新Token上传至COS的
tokens/latest/目录下,后续可配置CDN加速访问。
在腾讯云COS控制台,开启静态网站并绑定自定义域名(如 assets.your-domain.com),然后为该域名配置CDN。最终访问地址如:
https://assets.your-domain.com/tokens/latest/tokens.json开发项目即可通过该URL动态拉取最新Token,或通过脚本下载至本地。
npm install -D style-dictionary创建 build-tokens.js,从COS下载Token文件,生成CSS/SCSS/JS变量:
const StyleDictionary = require('style-dictionary');
const axios = require('axios');
const fs = require('fs');
const path = require('path');
const TOKEN_URL = 'https://assets.your-domain.com/tokens/latest/tokens.json';
async function build() {
// 1. 下载Token
const response = await axios.get(TOKEN_URL);
const tokens = response.data;
const tempFile = path.join(__dirname, 'temp-tokens.json');
fs.writeFileSync(tempFile, JSON.stringify(tokens, null, 2));
// 2. 配置Style Dictionary
const sd = StyleDictionary.extend({
source: [tempFile],
platforms: {
css: {
transformGroup: 'css',
buildPath: 'dist/css/',
files: [{ destination: 'variables.css', format: 'css/variables' }],
},
scss: {
transformGroup: 'scss',
buildPath: 'dist/scss/',
files: [{ destination: '_variables.scss', format: 'scss/variables' }],
},
js: {
transformGroup: 'js',
buildPath: 'dist/js/',
files: [{ destination: 'tokens.js', format: 'javascript/es6' }],
},
},
});
// 3. 构建
sd.buildAllPlatforms();
console.log('样式文件生成完成');
}
build();在构建脚本后增加上传逻辑(类似前文),将 dist/ 下的文件上传至COS对应目录(如 styles/latest/),并设置合适的 Cache-Control 头(例如 max-age=86400 缓存一天,版本更新时通过新路径或查询参数刷新)。
若团队已有前端项目,可直接安装Storybook:
npx storybook@latest initnpm run build-storybook默认输出目录为 storybook-static/。
腾讯云提供了 静态网站托管 服务(CloudBase或COS静态网站),推荐使用CloudBase(支持自动部署)。
使用CloudBase CLI:
npm install -g @cloudbase/cli
cloudbase login
cloudbase hosting deploy storybook-static -e 你的环境ID或使用COS SDK直接上传(类似前述),将 storybook-static/ 所有文件上传至COS的某个前缀(如 docs/),并开启静态网站功能。
结合GitHub Actions或腾讯云CODING,在Push时自动构建并部署Storybook,确保文档始终与最新设计同步。
利用Figma Webhook(或轮询Figma API)检测设计文件变更,触发云函数执行导出、构建、上传流程,实现全自动化。
在腾讯云SCF控制台,新建Node.js函数,并部署以下代码(集成上述导出+构建+上传逻辑):
// index.js - 云函数入口
exports.main_handler = async (event, context) => {
// 1. 从event中判断是否为Figma回调(若使用Webhook)
// 2. 执行导出Token → 构建样式 → 上传COS → 部署Storybook
// 3. 记录日志并返回
console.log('触发设计系统更新流程');
// ... 调用之前封装的模块
return { statusCode: 200, body: 'OK' };
};配置触发器:
创建API网关服务,将POST请求转发至SCF,并将该URL填入Figma Webhook设置中(需Figma团队版支持)。
维度 | 传统方式(纯人工) | 自动化方案(云端+CDN+SCF) |
|---|---|---|
设计Token同步 | 设计→开发聊天发送JSON,手动复制 | 上传至COS后,项目自动拉取 |
样式文件生成 | 开发手动写CSS变量,易出错 | Style Dictionary自动生成,零误差 |
图标/图片切图 | 手动导出,压缩,传图床 | Figma API批量导出 + 直接上传COS |
组件文档更新 | 开发手动更新Storybook | 每次Push自动构建部署 |
设计变更反馈周期 | 平均 2-4 小时 | 平均 5 分钟(全自动) |
设计还原度(开发自测) | 约 82%(因颜色间距偏差) | 约 98%(直接使用Token) |
design-system-automation/
├── export-tokens.js # Figma导出并上传COS
├── build-styles.js # 下载Token → Style Dictionary构建
├── upload-storybook.js # 部署Storybook至静态托管
├── scf-handler.js # 云函数入口(整合上述流程)
├── package.json
└── .env # 存放密钥(不提交Git)环境变量配置(.env):
FIGMA_TOKEN=xxx
FILE_KEY=xxx
COS_SECRET_ID=xxx
COS_SECRET_KEY=xxx
COS_BUCKET=xxx
COS_REGION=xxx
CDN_BASE_URL=https://assets.your-domain.com使用方式:
node export-tokens.js 和 node build-styles.js。Q1:Figma变量命名不规范,解析失败怎么办?
A:需与团队约定命名规范,例如必须包含 Color/、Spacing/ 前缀。本脚本可扩展支持自定义映射表。
Q2:COS访问权限如何设置?
A:建议使用子账号授权,仅赋予 PutObject 和 GetObject 权限,且Bucket设置为私有读写,通过CDN私有鉴权或临时密钥访问。
Q3:Style Dictionary生成的CSS变量如何应用到项目中?
A:前端项目可直接 @import url('https://cdn.../variables.css'),或在构建时下载至本地。
Q4:云函数超时怎么办? A:可将耗时的构建步骤(如Storybook构建)放在SCF中异步执行,或使用腾讯云容器服务(TKE)替代。
本文为零基础产品设计师提供了一条从设计到代码再到云端的完整技术路径,核心收益包括:
后续可探索方向:
所有代码均已开源,欢迎在评论区交流部署中遇到的问题。如需云端测试环境,可留言申请试用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。