惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Jina AI
Jina AI
The Cloudflare Blog
V
Visual Studio Blog
博客园_首页
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
博客园 - Franky

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
使用 Figma + GitHub Actions 完成 SVG 图标的完全自动化交付...
2020-06-30 · via 少数派

Matrix 精选

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


Figma 是我最喜欢的设计工具,它把设计从本地带到云端,让设计协作成为可能,更重要的是可以 通过 API 获取云端的设计数据,让设计的工程化更加容易。而 GitHub 设计团队很早就开始使用 Figma 了,他们的设计师发布了一套 如何从 Figma 自动生成图标的流程。2018 年 GitHub 发布了 Actions,可以通过编写脚本自动化一些流程,借助于社区的力量,我们可以轻松地组合各种已有 Action 来实现自己的自动化工作流。

GitHub Icon Workflow
GitHub Icon Workflow

GitHub 的图标自动化给了我很大启发,于是在 Figma 去年开放自己的 插件平台 时,我就开始研究 如何通过 Figma 插件来交付图标,直接从 Figma 文件生成图标的 React 组件代码。我觉得这应该是东半球最先进的图标交付方式了,因为 从始至终都不需要设计师和开发离开自己熟悉的工作环境,也不需要他们讲一句话 ,极大地提升了交付效率。

Figma Icon Automation

不过最开始的时候这个插件只支持直接从设计文件生成 React 组件代码,后来很多朋友问我什么时候支持 Vue,毕竟 Vue 还是比 React 用得多。最近我经过一番折腾,终于搞定了,现在它支持生成 Vue 组件代码啦!而且,我还给它加了通知功能。

下面我想给你讲一下整个交付流程是如何工作的,以及它是如何使用的。

它是如何工作的?

我在上文提到的 文章 中说到过,经过这些年的演进,图标从雪碧图到 iconfont,再到 SVG 图片,以及内联 SVG 代码的 React/Vue 组件,组件无疑是目前最方便的模式了。但是和其他形式的图标一样,我们也需要手动处理设计师给我们的 SVG 文件,把它变成 React/Vue 组件代码才可以使用。

但是因为 SVG 本身就是代码,所以这中间有很多流程都可以通过自动化的方式去解决。总的来说,我所实现的这个流程分为以下几步:

  • 首先,设计师在 Figma 中设计图标,并将每一个图标设置为设计组件;
  • 每次更新后打开 插件 点击发布,这个插件会向一个 GitHub 仓库提交一个版本更新的 PR;
  • 在 GitHub 中合并 PR 后会触发 GitHub Actions 自动脚本,这个自动脚本会通过 Figma API 拉取 SVG 代码,经过处理后生成 React/Vue 组件代码;
  • 将生成的组件代码并发布到 NPM,发布成功后通过企业微信或者飞书的 Webhook 在群里通知开发更新;
  • 最后,开发收到通知后在终端通过 yarn 或 npm 命令更新,就可以使用最新的图标了。
 图标自动化流程
图标自动化流程

在下文中,我将详细介绍 Vue 版本的使用方式。

它是如何使用的?

在 Figma 中设计

最开始,设计师在最喜欢的 Figma 中精心打磨每一个图标,并将它们都做成组件。这里需要注意的是,我们要给图标合理命名(目前不支持包含斜线,否则会被识别为文件夹层级)。

 在 Figma 中设计图标
在 Figma 中设计图标

安装并配置插件

我们先到 Figma Icon Automation 插件主页 中安装一下这个插件,然后需要在插件中填写一些基本配置。前面提到,这个流程需要涉及到 GitHub,所以我们要现在插件中填写 GitHub 的仓库地址和 token。

 插件配置
插件配置

仓库地址我分别写了一个 React 版本 和一个 Vue 版本 的,大家可以根据自己当前项目技术栈去选择 fork 一个仓库,把自己的仓库地址填在这里。GitHub token 可以在 GitHub 开发者设置 中生成, 记得勾选下面的 repo 全部权限

GitHub token 生成
GitHub token 生成

配置代码仓库

前文中提到,自动化的流程都在代码仓库中通过 GitHub Actions 执行,这个过程是通过代码仓库中的 .github/workflows 里面的脚本定义的。

github workflows
github workflows

从上面的脚本中可以看到,这个流程需要使用到的一些密钥,比如 Figma 的文件链接和 token,NPM 的 token,企业微信机器人的 webhook 链接等,我们需要先在仓库的 settings->Secrets 中添加好。

secrets
secrets

这些密钥的获取方法如下:

通过插件一键更新

上面那些都配置好之后,我们就可以在 Figma 中一键发布新版本图标了。插件会自动获取到当前的版本号,我们只需要填写一个高于当前版本的版本号,以及更新内容,如果想要获得通知还需要填上企业微信机器人的 webhook 地址和通知内容,就可以发布了。

 发布更新
发布更新

发布成功后,在企业微信会收到一条通知。可以看到,刚才的操作为我们生成了一条新的 pull request。

 企业微信收到通知
企业微信收到通知

合并 PR 触发自动化流程

现在,我们打开这个 PR 地址,前往代码仓库去合并它。

 合并分支
合并分支

这个合并的操作,会触发 GitHub 的自动化流程。

GitHub Actions
GitHub Actions

因为我在里面配置了企业微信通知,所以在这个过程执行完之后,会自动往企业微信发送通知。

 企业微信通知
企业微信通知

可以看到,上面的自动化流程还是用 GitHub Pages 的 Action 自动生成了一个在线网页,我们可以在这个网页中查找和复制图标名称。

 图标展示网页
图标展示网页

在终端执行命令更新并使用

接下来,我们就可以在终端执行命令安装或者更新图标了。更新之后,在代码中使用 import { Clock } from 'juuust-vue-icon' 的方式引入图标组件,还可以通过 sizecolor 来控制尺寸和颜色。

 更新图标并使用
更新图标并使用

它为什么高效?

上面的过程看起来有点复杂,我为什么说它高效呢?因为这是第一次使用,需要配置很多东西所以看起来有点复杂。在第一次配置完成之后,后续的使用就很简单了。 设计师每次更新时打开插件,填写新的版本号和修改内容,一键提交;企业微信机器人通知开发,开发点击 PR 链接合并它,触发自动化流程;图标被发布到 NPM 之后,企业微信机器人再次通知,开发就可以使用命令行更新图标。

同时,它也是很灵活的,这个插件只是通过 GitHub 的 API 生成一个版本更新(只改动了 package.json 中的 version)的 PR,图标的处理过程都在 GitHub Actions 里面。所以你可以根据自己的需求修改代码仓库中的自动化流程,修改图标展示页面,如果你想用其他代码托管平台(比如 GitLab),甚至可以修改我的 插件代码 ,不过就没有这么丰富的 GitHub Actions 可以使用了,需要使用对应平台的 CI 来自己实现。

目前,我们团队已经使用这套流程来交付图标了,整个过程只需要设计师和开发在接收到通知后点几下即可完成交付过程,节省了不少时间。现在很流行「设计系统」这个概念,它的作用主要就是减少设计到开发之间交付的一些阻力,而图标自动化交付就是我对「设计系统」的一个实践。

> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃