开源字体如何自动化维护Virgil 项目的 Prettier 与 cleanup 工具链解析【免费下载链接】virgilThe old-font that powered Excalidraw. Now replaced by Excalifont.项目地址: https://gitcode.com/gh_mirrors/vi/virgil开源字体怎么维护才能省心又高效Virgil 项目给出了一个值得抄作业的答案把字体维护变成自动化流水线。Virgil 是由设计师 Ellinor Rapp 创作的免费手写字体曾是白板绘图工具 Excalidraw 的官方字体如今虽已被 Excalifont 取代但它的维护思路依然是经典范例。这个仓库用 Prettier 格式化工具搭配 cleanup 清理脚本把字体源文件的排版、去噪和检查全部自动化再交给 CI 流水线自动提交修复完整展示了一条开源字体自动化维护的成熟路径。本文就从零拆解这套工具链看看字体项目也能像软件工程一样“流水线化”。Virgil为 Excalidraw 而生的开源手写字体Virgil 是一款充满手写感的开源字体由字体设计师 Ellinor Rapp 为绘图工具 Excalidraw 量身打造。它的笔画自然随意、亲切随性非常适合白板、草图类的产品场景。项目以 SIL Open Font LicenseOFL-1.1开源协议发布任何人可以自由使用和修改。在仓库里你既能看到编译好的成品字体Virgil.woff2也能找到供设计师编辑的字体源文件src/Virgil.vfj以及演示字体的index.html页面。真正让这个项目与众不同的是它维护字体源文件的自动化工具链——毕竟字体文件的“维护”通常被认为是相当手工的活。字体项目里的“代码文件”认识 VFJ 字体源文件要理解这套工具链先要认识字体源文件src/Virgil.vfj。VFJ 是字体编辑软件 FontLab 的原生格式而 Virgil 项目把它保存成了结构化的 JSON 文本文件里包含 534 个字形glyphs每个字形记录了名称、Unicode 编码、轮廓节点等数据总计约 4 万行。正因为 VFJ 是文本文件它才具备了“代码化”的一切基础可以用 Git 跟踪每一次修改、可以做代码审查、可以运行脚本批量处理。可以说把字体源文件文本化是后续一切自动化的前提。自动化维护第一招Prettier 统一格式化字体文件 ✨为什么字体源文件也需要格式化很多人会问字体文件又不是代码为什么也要格式化原因很简单——src/Virgil.vfj是 JSON 文本当多人多次手动编辑后缩进、换行、空格会变得五花八门Git 提交记录里会出现大量毫无意义的差异让代码审查变得非常痛苦。一键检查与修复lint 与 fix 命令的用法Virgil 项目在package.json中引入 Prettier 2.2.1 和官方配置excalidraw/prettier-config并为字体文件单独指定 JSON 解析器。通过 yarn 脚本把“检查”和“修复”拆成了两套互补的命令命令作用yarn lint检查所有文件格式是否合规不修改文件yarn fix自动修复所有文件的格式问题yarn lint:font单独检查字体源文件src/Virgil.vfj的格式yarn fix:font清理冗余数据 重新格式化字体源文件lint系列使用 Prettier 的--list-different参数只报告哪些文件不合格fix系列使用--write参数直接把格式改好。一查一修既能在 CI 中拦截问题也能在本地一键修复这是开源字体维护中最基础的一环。自动化维护第二招cleanup 脚本一键清理冗余数据 格式化只是第一步Virgil 项目还专门编写了script/cleanup.js清理脚本解决一个非常实际的痛点FontLab 编辑器每次保存字体文件时都会给每个字形写入lastModified最后修改时间字段。这个字段对设计毫无用处却会让 Git 差异变得极其嘈杂——改一个字形几百个字形的时间戳都跟着变化。cleanup 脚本做的事情非常简洁读取src/Virgil.vfj解析成 JSON遍历全部 534 个字形删除lastModified字段再重新序列化写回文件。核心逻辑只有几行for (let glyph of virgil.font.glyphs) { delete glyph.lastModified; } let data JSON.stringify(virgil, null, 2); fs.writeFileSync(SOURCE, data);值得一提的是脚本会把文件重新序列化为「2 空格缩进」的格式与 Prettier 的规则保持一致两条工具链配合得天衣无缝。这正是src/Virgil.vfj这样的大型 JSON 文件始终保持“干净”的关键。自动化维护第三招CI 流水线让维护无人值守 工具准备好了谁来执行Virgil 项目用 GitHub Actions 把整个流程接入了 CI实现真正的无人值守自动修复工作流.github/workflows/fix.yml每次 push 后自动运行yarn fix若检测到文件有改动就以 “Excalidraw Bot” 身份自动提交 “Auto commit: Format and cleanup”把格式化从人肉劳动变成全自动流程。检查工作流.github/workflows/lint.yml在主分支推送和所有 Pull Request 上运行yarn lint确保任何提交都符合格式规范把问题拦截在合并之前。依赖自动更新.github/dependabot.yml每周自动检查依赖更新让 Prettier 等工具始终保持在较新版本。三套机制各司其职检查守门、修复兜底、更新保鲜构成了一个完整的开源字体自动化维护闭环。开源字体自动化维护的三条经验 ✅从 Virgil 项目身上可以提炼出几条可复用的经验源文件文本化是前提只有字体源文件是文本格式Git 追踪、脚本批处理和自动化格式化才有可能。格式化与清理交给脚本把缩进、时间戳这类机械劳动交给工具人只负责有意义的修改Git 历史会干净得多。检查、修复、CI 三层兜底lint 拦截、fix 修复、CI 自动提交让自动化维护真正实现“无人值守”。结语Virgil 虽然已被 Excalifont 取代、退出了 Excalidraw 的舞台但它留下的这套「Prettier cleanup 脚本 CI 流水线」开源字体自动化维护方案至今仍是字体项目工程化的优秀范本。如果你也在维护字体或类似的 JSON 大文件不妨照它的思路把格式化、清理和检查全部自动化起来——你会发现维护一个开源字体也可以像维护代码一样轻松。【免费下载链接】virgilThe old-font that powered Excalidraw. Now replaced by Excalifont.项目地址: https://gitcode.com/gh_mirrors/vi/virgil创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考