菜单

构建与打包系统

相关源文件

本文档介绍了负责将 Fira Code 字体从源代码文件构建和打包成各种分发就绪字体格式的系统。构建系统将字体定义文件转换为多种可用格式,包括 OTF、TTF、可变字体和针对 Web 优化的格式。

有关字体定义系统本身的更多信息,请参阅 字体定义系统。有关作为贡献者构建 Fira Code 的详细信息,请参阅 构建过程

系统概览

Fira Code 的构建和打包系统通过一系列精心编排的构建脚本,将源字体定义 (FiraCode.glyphs) 转换为多种字体格式。整个过程可以在 Docker 容器内运行,以确保不同系统之间构建环境的一致性。

来源:script/build.sh96-101 Makefile3-7

构建环境

Fira Code 使用 Docker 提供一致的构建环境,其中预装了所有必需的依赖项。这种方法确保任何人都可以构建字体,而无需在本地计算机上配置特定的工具和版本。

来源:Dockerfile1-9 Makefile3-4

Docker 环境包含

依赖项目的
Python 3运行字体工具的基础环境
fontmake.glyphs 文件到 OTF/TTF 格式的转换
ttfautohint为 TTF 字体添加字距信息
woff2_compress创建压缩的 WOFF2 Web 字体文件
sfnt2woff-zopfli创建压缩的 WOFF Web 字体文件
gftools字体后处理的实用工具

来源:Dockerfile5-9 Makefile3-4

主要构建过程

build.sh 脚本负责协调主要的构建过程,它会准备好带有任何请求功能的字体定义文件,然后调用每个字体格式的单独构建脚本。

来源:script/build.sh1-104 Makefile3-4

构建脚本接受多个参数来定制构建

参数描述
-f, --features要烘焙到字体中的功能的逗号分隔列表
-w, --weights要构建的字重的逗号分隔列表
-n, --family-name字体的自定义字体族名称
-g, --generate-glyphs-only仅生成自定义字形文件,不进行构建

来源:script/build.sh11-58

字体格式生成

TTF 生成

TTF(TrueType Font)生成过程将 Glyphs 文件转换为 TTF 格式,并应用字距以在屏幕上获得更好的渲染效果。

来源:script/build_ttf.sh1-32

该脚本单独处理每个请求的字重(默认为 Light, Regular, Retina, Medium, SemiBold, Bold)

  1. 创建输出目录结构
  2. 使用 fontmake 为每个字重生成 TTF 文件
  3. 应用 ttfautohint 以改进屏幕渲染
  4. 将最终的 TTF 文件保存到分发目录

来源:script/build_ttf.sh14-31

OTF 生成

OTF(OpenType Font)生成过程类似,但会生成不包含字距信息的 OpenType 格式文件。

来源:script/build_otf.sh1-28

与 TTF 过程类似,OTF 生成

  1. 创建输出目录结构
  2. 使用 fontmake 为每个字重生成 OTF 文件
  3. 将 OTF 文件保存到分发目录

来源:script/build_otf.sh14-27

可变字体生成

可变字体通过字体插值在单个文件中提供多种字重。这有助于减小文件大小并提高 Web 设计的灵活性。

来源:script/build_variable.sh1-41

可变字体生成过程

  1. 创建一个临时的修改版 Glyphs 文件(禁用 Retina 字重导出)
  2. 使用 fontmake 生成可变字体
  3. 使用 gftools 应用元数据和字距调整
  4. 将最终的可变字体保存到分发目录

来源:script/build_variable.sh19-39

Web 字体生成

WOFF2 格式

WOFF2(Web Open Font Format 2)比 WOFF 提供更好的压缩效果,从而减小 Web 使用的文件大小。

来源:script/build_woff2.sh1-28

WOFF2 生成过程

  1. 以 TTF 文件作为输入
  2. 使用 woff2_compress 创建压缩的 WOFF2 文件
  3. 将生成的文件移至分发目录
  4. 移除 Retina 字重(该字重通常不包含在最终分发中)

来源:script/build_woff2.sh21-27

WOFF 格式

WOFF(Web Open Font Format)是一种较旧但仍被广泛支持的 Web 字体格式。

来源:script/build_woff.sh1-28

WOFF 生成过程

  1. 以 TTF 文件作为输入
  2. 使用 sfnt2woff-zopfli 创建压缩的 WOFF 文件
  3. 将生成的文件移至分发目录
  4. 移除 Retina 字重

来源:script/build_woff.sh21-27

打包流程

在所有字体格式生成完毕后,打包过程会准备它们以供分发。

来源:Makefile6-7 script/everything9

打包过程由 package.sh 管理,并且可以通过 Makefile 使用 make package 调用。此步骤收集所有生成的字体文件,并将它们整理成最终的分发格式。

与其他系统集成

构建和打包系统连接了字体定义系统与分发系统,将设计转换为可用的字体文件。

来源:Makefile1-8 script/build.sh1-104 script/everything1-10

运行构建系统

对于想要构建 Fira Code 的用户,主要有两种方法

  1. 使用 Docker(推荐):

    make build
    make package
    
  2. 使用本地工具(需要依赖项):

    ./script/build.sh [options]
    ./script/package.sh
    

名为 everything 的脚本也提供了一种方便的方式来连续运行多个构建步骤,这对于开发和测试特别有用。

来源: Makefile1-8 script/everything1-10