简介:sketch-data-faker 是一款面向UI/UX设计师与前端开发者的Sketch智能占位符插件,专为提升原型设计效率而生。它基于 Faker.js 等数据源,提供130余种可预测的随机内容类型(如姓名、邮箱、电话、段落、地址等),支持在普通图层、符号实例乃至跨库引用的Symbol中动态填充并一键刷新,显著简化Mock数据维护成本。资源包共17个文件,含5个核心JS脚本(实现数据生成与Sketch API交互)、4个JSON配置文件(定义数据类型与映射规则)、2张PNG图标资源及README.md等文档,整体仅919KB,轻量易部署。目前已有159人学习下载,开箱即用——双击.sketchplugin文件即可安装。用户可直接获得完整插件工程结构、本地化Faker数据封装逻辑、Sketch插件Manifest配置范式及Library符号兼容方案,是深入理解Sketch插件开发与设计系统数据协同的理想实践样本。
1. sketch-data-faker:不是“随便填点假数据”的插件,而是 Sketch 设计系统里能跑通 JSON Schema、支持字段级联动、自动适配图层命名规则的智能占位符引擎
你有没有遇到过这样的翻车现场:UI 设计师用 Sketch 做高保真原型,产品经理催着交可交互稿,结果所有文本框里还写着「Lorem ipsum」,图片框里是灰色占位图,表格里全是「Item 1」「Item 2」——临时手敲 20 行用户数据?3 分钟后发现邮箱字段写成了「user@domain」没加后缀;再改,又把手机号格式从「138****1234」错贴成「+86 138-0013-8000」;最后导出交付时,开发拿着截图问:“这个‘status: active’是枚举值还是布尔值?API 文档里没写清楚啊。”
sketch-data-faker 就是专治这种“伪真实”焦虑的黑匣子。它不靠人工填、不靠复制粘贴、不靠设计师硬背 faker.js 的 API;而是把 Faker.js 的 130+ 类型(name、email、phone、address、date、lorem、uuid、color、image、job、company…)封装成 Sketch 原生可识别的占位符语法,再通过图层命名规则(如Text: user.name、Image: avatar?size=200x200&format=png)触发实时渲染,还能读取外部 JSON Schema 或本地 mock-data.json 文件做字段约束与类型推导。它不是“填充工具”,是设计阶段就嵌入数据契约的轻量级 mock 层——当你在 Sketch 里双击一个文本图层看到{{user.email}},背后跑的是真实 faker.js 实例,且支持自定义 locale、seed 控制、甚至链式调用({{address.city}}, {{address.state}} {{address.zipCode}})。适合需要交付可测试原型、对接前端 mock server、或正在搭建 Design Token + Data Schema 双轨制设计系统的团队。新手能 5 分钟上手填满一页列表页,熟手则用它驱动组件库的自动化数据预览。
2. 插件安装与初始化:从 Sketch 插件市场到本地加载,两种路径的实操差异与环境校验要点
2.1 官方渠道安装:Sketch Plugin Manager(SPM)方式及其版本兼容性陷阱
sketch-data-faker 目前未上架 Sketch 官方插件市场(Sketch App Sources),但可通过社区维护的 Sketch Plugin Manager(SPM)一键安装。SPM 是目前最稳定的第三方插件管理器,支持 Sketch 72–95 版本(截至 2024 年 Q2)。安装步骤如下:
# 在终端执行(macOS) curl -fsSL https://raw.githubusercontent.com/andrew888888/sketch-plugin-manager/master/install.sh | sh提示:SPM 安装脚本会自动检测 Sketch 应用路径(默认
/Applications/Sketch.app),若你将 Sketch 安装在非标准路径(如/Applications/Design Apps/Sketch.app),需手动修改~/.spm/config.json中的sketchPath字段,否则插件菜单不会出现。
安装完成后,在 Sketch 菜单栏点击Plugins → Sketch Plugin Manager → Install Plugins,搜索sketch-data-faker,点击安装。此时插件会下载最新 release(当前为 v2.4.1),解压至~/Library/Application Support/com.bohemiancoding.sketch3/Plugins/下的独立文件夹,并自动注册菜单项。
但注意:SPM 安装的插件默认启用「自动更新」,而 sketch-data-faker 的更新策略是「语义化大版本隔离」——v2.x 与 v1.x 的占位符语法不兼容(v1 使用faker.name.firstName(),v2 改为{{name.firstName}})。若你正协作使用旧版设计稿,务必在 SPM 中关闭自动更新,或手动锁定版本。
2.2 手动加载开发版:从 GitHub Release 下载源码包并启用调试模式
当需要验证某项新特性(如 JSON Schema 自动映射)、修复特定字段渲染异常,或公司安全策略禁止自动联网安装插件时,应采用手动加载方式。官方 release 页面(https://github.com/mattboldt/sketch-data-faker/releases)提供.sketchplugin包(本质是 zip 压缩包,内含manifest.json+Content/目录)。
操作流程:
- 下载
sketch-data-faker-v2.4.1.sketchplugin; - 解压得到
sketch-data-faker.sketchplugin文件夹; - 进入该文件夹,用文本编辑器打开
manifest.json,确认"version"字段为2.4.1,且"identifier"为com.mattboldt.sketch-data-faker; - 关键一步:在
Content/目录下新建空文件debug-mode.txt(无扩展名,内容为空); - 将整个
sketch-data-faker.sketchplugin文件夹拖入 Sketch 的 Plugins 目录(路径同上:~/Library/Application Support/com.bohemiancoding.sketch3/Plugins/); - 重启 Sketch,菜单栏会出现Plugins → sketch-data-faker → Debug Mode Enabled子项。
启用 debug 模式后,插件会在控制台输出每条占位符的解析日志(如Resolving {{user.email}} → john.doe@example.com),并捕获 faker.js 抛出的异常(例如 locale 不支持时的Error: Unknown locale 'zh-CN'),这对排查字段渲染失败极其关键——比盲猜“为什么这里没出数据”高效十倍。
2.3 初始化校验:三步确认插件已真正激活并可响应图层命名
安装/加载完成后,必须执行以下三项校验,缺一不可:
菜单可见性检查:Sketch 菜单栏是否出现
Plugins → sketch-data-faker,且子菜单包含Fill Selected Layers、Fill All Artboards、Reset to Placeholder、Open Settings四项?若只有前三项缺失Open Settings,说明 manifest.json 中preferences字段未正确声明,需回退到 v2.3.0 或手动补全配置项。Faker.js 运行时检查:新建空白画布,创建一个文本图层,命名为
Text: {{lorem.sentence}},然后执行Plugins → sketch-data-faker → Fill Selected Layers。若图层内容变为一段英文句子(如 “Quis autem vel eum iure reprehenderit…”),说明 faker.js 引擎已加载成功;若仍显示{{lorem.sentence}},大概率是插件未获取到 Sketch 的 JSContext 权限(见避坑章节)。Locale 与 Seed 验证:在
Plugins → sketch-data-faker → Open Settings中,将Locale设置为en_US,Seed输入12345,再对同一图层重复填充。两次结果必须完全一致(如{{name.fullName}}恒为John Doe)。这是 mock 数据可复现性的基石——没有 seed 控制的占位符,在评审会议中每次刷新都变,会让开发质疑“这到底是哪个状态?”。
3. 占位符语法详解:从基础字段调用到嵌套对象、条件分支与外部数据源联动
3.1 基础语法结构:图层命名即 DSL,四类占位符覆盖 90% 场景
sketch-data-faker 的核心设计哲学是「图层命名即接口」。它不依赖弹窗选择器,而是通过解析图层名称字符串,提取占位符模板。命名格式统一为:
[图层类型]: [占位符表达式] [?query-string]其中[图层类型]是可选前缀,用于指导渲染逻辑(如Text:、Image:、Shape:),[占位符表达式]是 faker.js 的路径式调用,[?query-string]是参数微调区。以下是高频使用的四类语法:
| 类型 | 示例图层名 | 渲染效果 | 参数说明 |
|---|---|---|---|
| 纯文本字段 | Text: {{name.firstName}} | John | 支持所有 faker.js 的name.*方法,如lastName,fullName,prefix,suffix |
| 带格式化参数 | Text: {{date.past}}?days=30&refDate=2024-01-01 | 2023-12-15T08:22:34.123Z | days控制时间范围,refDate设定基准日,避免每次生成时间戳都不同 |
| 图像占位符 | Image: {{image.avatar}}?size=120x120&format=png | 渲染一张 120×120 PNG 头像 | size必填,format可选png/jpg/webp,backgroundColor可设十六进制色值 |
| 数值区间控制 | Text: {{datatype.number}}?min=100&max=999&precision=0 | 482 | precision=0确保输出整数,避免482.333这类浮点数破坏 UI 对齐 |
注意:所有占位符必须用双大括号
{{ }}包裹,且内部不能有空格({{ name.firstName }}会解析失败)。图层名中:后第一个字符不能是空格,否则插件跳过该图层。
3.2 高级语法:JSON Schema 驱动的自动映射与嵌套对象展开
当设计稿需严格匹配后端 API 返回结构时,手动写{{user.profile.address.street}}易出错且难维护。sketch-data-faker 支持读取外部 JSON Schema 文件,自动推导字段路径并填充。操作流程如下:
- 准备
schema.json文件(示例):
{ "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "email": { "type": "string", "format": "email" }, "profile": { "type": "object", "properties": { "avatar": { "type": "string", "format": "uri" }, "bio": { "type": "string" } } } } }在 Sketch 中新建图层,命名为
Schema: ./schema.json(路径为相对于 Sketch 文件的相对路径);执行
Plugins → sketch-data-faker → Fill Selected Layers。
插件会解析 schema,为每个string类型字段分配 faker.js 对应方法(email→internet.email(),uuid→datatype.uuid(),uri→internet.avatar()),并递归处理profile对象,最终生成类似:
{ "id": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8", "name": "Sarah Johnson", "email": "sarah.johnson@example.net", "profile": { "avatar": "https://cloudflare-ipfs.com/ipfs/Qm.../avatar.png", "bio": "Passionate frontend developer with 5+ years experience..." } }提示:schema 中若字段含
description,插件会优先使用其值作为 fallback 占位符(如"description": "User's full legal name"→ 渲染为User's full legal name),这对尚未实现 faker 映射的冷门字段很实用。
3.3 条件分支与循环语法:用if和for实现动态列表与状态切换
sketch-data-faker v2.4+ 引入了轻量级模板语法,支持基于数据状态的条件渲染和重复渲染,彻底解决“列表项数量固定”的设计瓶颈。
条件分支:图层名
Text: {{if user.isActive}}Active{{else}}Inactive{{/if}}
若user.isActive为true,渲染Active;否则Inactive。支持多层嵌套,如{{if user.role == 'admin'}}<span class="badge">Admin</span>{{/if}}。循环渲染:对容器图层(Group 或 Artboard)设置命名
List: users?count=5,插件会生成 5 个子图层副本,每个副本自动注入users[0]到users[4]的数据。子图层命名需含索引变量,如Text: {{users.[index].name}}、Image: {{users.[index].avatar}}?size=40x40。
实际应用中,我常将「订单列表」Artboard 命名为List: orders?count=3,其内部「订单卡片」Group 命名为Card: order.[index],卡片内各字段用{{order.[index].id}}、{{order.[index].status}}调用——这样一份设计稿就能同时展示「待支付」「已发货」「已完成」三种状态,无需复制粘贴三遍。
4. 常见问题排查:五类高频翻车现场的根因定位与血泪经验总结
4.1 现象:图层内容始终显示{{xxx}}原样,未被替换
原因:Sketch 的 JSContext 权限未授予插件,或插件未正确绑定到当前文档上下文。Sketch 90+ 版本加强了沙箱机制,插件需显式请求executeJavaScript权限。
解决:
- 打开 Sketch → Preferences → Plugins,确认
sketch-data-faker已勾选「Enable」; - 若仍无效,在插件设置中开启
Force Context Refresh(v2.4.0 新增开关),该选项会强制重建 JSContext 并重载 faker.js; - 终极方案:退出 Sketch,删除
~/Library/Caches/com.bohemiancoding.sketch3/下所有Plugin*缓存文件,重启后再试。
4.2 现象:{{image.avatar}}渲染出空白图层,或报错Failed to load image
原因:插件默认使用https://via.placeholder.com作为 fallback 图像源,但该域名近年频繁被国内网络拦截,导致请求超时。
解决:
- 进入插件设置,将
Image Fallback URL改为国内可用镜像,如https://dummyimage.com或https://picsum.photos; - 更推荐方案:在
Image:命名后直接指定绝对 URL,如Image: https://picsum.photos/seed/{{datatype.uuid}}/120/120,利用 faker 的uuid保证每次生成唯一 seed,避免浏览器缓存; - 若需私有图床,可在
manifest.json的settings字段中添加imageBaseURL,重新打包插件。
4.3 现象:{{lorem.paragraphs}}?count=3生成的段落间无换行,全部挤在同一行
原因:Sketch 文本图层默认关闭「Auto Height」且未启用「Allow Text to Wrap」,导致\n换行符被忽略。
解决:
- 选中目标文本图层 → 右侧 Inspector 面板 → 勾选
Auto Height; - 在
Text选项卡中,将Line Height设为1.5或更高,确保段落间距; - 关键一步:将图层宽度设为固定值(如
320px),否则 Sketch 无法计算换行位置。
4.4 现象:使用Schema: ./data.json时,部分字段渲染为null或undefined
原因:JSON 文件中字段值为null,或 faker.js 未覆盖该 schema 类型(如format: "date-time"无对应 faker 方法)。
解决:
- 检查
data.json是否为合法 JSON(用 https://jsonlint.com 验证); - 查看插件 debug 日志,定位具体字段名,手动为其添加 faker 映射:在
Content/faker-mappings.js中追加date-time: () => faker.date.recent().toISOString(); - 更稳妥做法:在 schema 中为
null字段添加default值,如"lastLogin": { "type": "string", "format": "date-time", "default": "2024-01-01T00:00:00Z" }。
4.5 现象:多人协作时,A 同学的{{user.email}}正常,B 同学机器上却显示undefined
原因:B 同学的 Sketch 版本低于 v85,而 sketch-data-faker v2.4+ 依赖sketch.getLayerAPI 的新返回结构,旧版返回对象缺少text属性。
解决:
- B 同学升级 Sketch 至 v85+(官方支持 macOS 12+);
- 若无法升级,降级插件至 v1.9.3(仅支持
{{faker.internet.email()}}语法,无 schema 功能); - 团队统一在
README.md中声明最低 Sketch 版本要求,并在插件设置页增加版本检测提示(v2.4.1 已内置该功能,会弹窗警告)。
5. 进阶技巧:用 sketch-data-faker 构建可交付的「模型草稿(model draft)」工作流
5.1 模型草稿(model draft)的本质:让设计稿自带数据契约,而非静态截图
“model draft” 不是新概念,而是对传统「视觉稿 + API 文档」割裂交付模式的重构。它的核心是:设计稿本身即数据契约的可视化载体。sketch-data-faker 让这一理念落地——当你在 Sketch 里看到一个Text: {{user.status}}图层,它不只是文字,而是明确声明「此处接收一个字符串枚举值,可能为active/inactive/pending」;当你看到List: orders?count=5,它隐含「后端至少返回 5 条订单,前端需支持分页滚动」。这种契约感,让开发无需反复确认字段含义,测试无需手动构造边界数据。
我现在的标准动作是:在项目启动期,与后端约定好核心 schema(如user.json,product.json),将其放入 Sketch 工程根目录;所有页面级 Artboard 命名为Page: user-profile、Page: product-list;组件库中的「用户卡片」Symbol 命名为Symbol: user-card,内部字段用{{user.[index].name}}绑定。这样,设计评审时,产品经理点开「用户列表」Artboard,看到的不是静态 3 行数据,而是 5 行真实 faker 生成的、符合业务规则的 mock 数据——包括邮箱格式、头像尺寸、状态标签颜色,全部与最终上线一致。
5.2 与 Sketch Path Distributor 插件协同:批量分发模型草稿到组件库
Sketch Path Distributor 是业内公认的 Symbol 管理利器,但它本身不生成数据。我们将 sketch-data-faker 与其组合,实现「数据驱动的 Symbol 分发」:
- 创建主 Symbol 库文件
design-system.sketch,其中定义「按钮」、「输入框」、「卡片」等基础组件; - 在组件内部,用
Text: {{button.label}}、Shape: {{button.color}}命名占位图层; - 新建
mock-data.json文件,内容为:
{ "button": { "label": "Submit", "color": "#007AFF" }, "input": { "placeholder": "Enter your email" } }- 在主工程文件中,选中所有 Symbol 实例 → 执行
Plugins → Sketch Path Distributor → Distribute from Library; - 关键一步:在 Distributor 的「Post-Distribution Script」中填入:
// 自动触发 sketch-data-faker 填充 const sketch = require('sketch'); const dataFaker = sketch.getPlugin('com.mattboldt.sketch-data-faker'); if (dataFaker) { dataFaker.fillSelectedLayers(); }这样,每次从库同步 Symbol,都会自动用mock-data.json中的值填充——按钮文字变成「Submit」,背景色变成蓝色,输入框 placeholder 自动更新。模型草稿不再是一次性产物,而是随组件库迭代持续演进的数据快照。
5.3 导出为可交互原型:用 sketch-data-faker 生成真实 mock API 响应
Sketch 本身不提供 API 服务,但 sketch-data-faker 的数据可导出为标准 JSON,供前端 mock server 消费。操作路径如下:
- 在 Sketch 中完成所有占位符填充;
- 执行
Plugins → sketch-data-faker → Export Mock Data(v2.4.1 新增功能); - 选择导出范围:
Current Page/All Artboards/Selected Layers; - 输出格式选
JSON,勾选Include Schema(生成对应 JSON Schema); - 保存为
mock-api-response.json。
该 JSON 文件可直接喂给 MSW(Mock Service Worker)或 MirageJS:
// msw setup import { rest } from 'msw' import mockData from './mock-api-response.json' export const handlers = [ rest.get('/api/users', (req, res, ctx) => { return res(ctx.status(200), ctx.json(mockData)) }) ]从此,前端开发无需等待后端联调,打开浏览器就能看到真实数据驱动的交互效果——列表滚动、状态切换、错误提示,全部基于你在 Sketch 里定义的模型草稿。这才是「设计即代码」的朴素实践。
从那以后我每次启动新项目,第一件事就是把schema.json和mock-data.json放进 Sketch 工程,然后花 10 分钟给所有图层打上{{ }}标签。不是为了炫技,而是让每一处像素都承载可验证的数据语义。希望帮到你。
本文还有配套的精品资源,点击获取