《游戏引擎实现原理》8.2 构建与部署
把《微光岛》真正构建成可发布的静态产物:一次 vite 生产打包(minify + 内容哈希)、静态资源拷贝、index.html 生成、带 sha256 的产物清单,再用一个校验器重算哈希并做篡改检测。真实 CDN 上传属 L4,本节显式标注。
tag
把《微光岛》真正构建成可发布的静态产物:一次 vite 生产打包(minify + 内容哈希)、静态资源拷贝、index.html 生成、带 sha256 的产物清单,再用一个校验器重算哈希并做篡改检测。真实 CDN 上传属 L4,本节显式标注。
边界清楚了,下一步是让不该进包的模块根本不进包。本节用构建期常量开关把阴影、后处理、2D 叠层整块摇掉,并用 rolldown 实测四种开关组合的产物体积:全开 1140 字节,关掉 2D 叠层 903,只留阴影 515,移动端最小包 80 字节,整体降幅 93.0%。
卷四开篇,先把前三卷的 helio 引擎变成一个可分析的产物:用 module-graph 扫出 187 个模块的依赖图,量出「源码 → 打包 → 压缩」三段真实体积,再用符号级 tree-shaking 删掉入口用不到的顶层导出。全部代码在 Node 直跑,拼出来的 bundle 与原始 demo 逐位相同。
把 TaskAPI 编译成能上服务器的产物:用 GOOS/GOARCH 在 Mac 上交叉编译出 Linux 二进制、用 CGO_ENABLED=0 做静态链接、用 -trimpath 与 -ldflags 注入版本号并瘦身,再用 file 与 go version -m 核对产物,最后写成可复用的构建脚本。
在流水线里构建镜像有 DinD、DooD 与无守护进程构建器三条路。本篇讲清 docker:dind 的 privileged 与 TLS 配置、storage driver 在嵌套场景下的坑、挂载 docker.sock 的风险边界,给出 GitLab Runner docker executor 与临时 runner 的落地配置、层缓存复用策略与安全加固清单。
把 make 当作任务运行器而非构建工具:目标与依赖的语义、PHONY 与增量判断、并行执行、变量与函数,以及与 just、task 的取舍和迁移路径。
系统讲解 Defold 项目的质量保障体系:测试策略与可测性设计、纯 Lua 逻辑与引擎解耦、busted 单元测试与用例编写、headless 集成测试、bob.jar 命令行构建、多平台构建矩阵、自动化版本号与发布,以及静态检查与代码规范。
Nix 的时间花在两个阶段:求值(eval)与构建(build)。前者常被忽视却是「改一行等一分钟」的元凶,后者则受调度与缓存策略支配。本文详解 eval 剖析与缓存、惰性求值反模式、并行构建与 remote builders、store 优化与 GC 策略。
系统覆盖 Scala 三大构建工具:sbt 核心概念(build.sbt、模块、依赖、task)、Mill 简洁替代、Scala CLI 脚本化与云端,多模块工程、依赖管理、增量编译与 CI 全流程。
系统讲解 Monorepo 工程的构建与部署实践:pnpm workspace 与依赖管理、Turborepo/Nx 任务编排与增量缓存、Affected 定向构建、构建产物共享与缓存命中、Monorepo 在 Vercel/Cloudflare 的部署策略、发布流程与版本管理(Changesets)、以及 Monorepo 的边界与选型。
系统讲解 Kubernetes 镜像工程化:Docker/BuildKit 高效构建、多阶段构建与镜像瘦身、镜像层与缓存、漏洞扫描(Trivy/Grype)、SBOM 生成、镜像签名(cosign/SLSA)、私有仓库与拉取策略、镜像生命周期,以及软件供应链安全(SLSA/供应链信任)的完整落地。
一个个人游戏在手动导出、脚本化构建和完整 CI/CD 之间做技术选型的案例,详细讨论版本号、平台包、校验清单、Steam 上传和发布风险。
全面讲解 Go 构建标志与环境变量,涵盖 ldflags 注入版本信息、tags 条件编译、CGO_ENABLED 控制、GOOS/GOARCH 交叉编译、编译缓存管理、可复现构建与 Docker 多阶段构建实践。
讲 Go 程序如何通过 ldflags 注入版本号、Git commit 和构建时间,并在 CLI 或 HTTP 健康检查中展示。