第 5 章 部署

围绕速度、协作、安全、部署队列、权限和静态资源缓存设计可回滚发布流程。

直觉起点

、、、、共同构成本页的观察坐标。前端部署发布的是带内容地址的静态资源与引用它们的入口文档;流程要把代码审查、权限、队列、缓存策略和回滚顺序组织成原子可观察的变更。 工程化不是工具数量,而是把重复操作变成可验证流程,让变更更快获得反馈、失败更早暴露、制品可以追溯、发布可以回滚。

六阶段交付链

1. 冻结发布制品

固定源码提交、依赖锁、工程配置、模板版本和目标环境,先预测输出文件与资源引用。没有输入身份的构建无法复现。

2. 执行代码审查

明确源码、生成目录、模块图、静态资源、入口文档与部署环境的所有者。共享环境变更必须有队列或互斥边界。

3. 进入部署队列

每个阶段只产生一个可验证输出,构建制品以摘要签发。后续测试与部署消费同一制品,不能按环境重新编译。

4. 上传不可变资源

注入单一边界:模板冲突、模块失败、缓存错配、HMR 残留、网络中断或权限拒绝,停止在首个偏离点。

5. 切换入口版本

区分 2018 年 webpack、Yeoman、Apache 语境与当前工具。现代替代保持原问题身份,并重新验证配置、缓存和回滚行为。

6. 验证并回滚演练

删除故障并重放同一提交,核对文件树、制品摘要、资源 URL、入口版本与用户探测;旧版本可恢复才完成签发。

核心机制深挖

前端部署发布的是带内容地址的静态资源与引用它们的入口文档;流程要把代码审查、权限、队列、缓存策略和回滚顺序组织成原子可观察的变更。 每次变更统一登记六类证据:源码身份、配置版本、依赖解析、制品摘要、环境状态、回滚条件。模板不确定会导致项目起点漂移,构建两次会让测试制品与生产制品不同,缓存地址错误会造成跨版本资源,权限与队列缺失会让并发部署互相覆盖。

本页签发不变量是:制品只构建一次并可追溯,静态资源先于入口发布,旧资源在回滚窗口内保留,权限与审批不能被临时脚本绕过。。流程必须回答谁发起、消费什么输入、产生哪个制品、失败由谁观察、共享环境怎样互斥、缓存何时失效,以及旧版本如何恢复。构建成功或页面可打开只是证据的一部分。

2018 版与现代前端的版本账本

原书出版于 2018 年,以 Node.js、webpack、Babel、PostCSS、Yeoman、webpack-dev-middleware、Livereload/HMR、Apache、GitFlow 和 WebHook 为主要实例。重构保留 7 章 98 个目录条目,不用 Vite、Module Federation、TypeScript、Playwright、RUM 等后来主题替换原书身份;这些能力只在现代对照中说明如何延续相同工程目标。

版本账本至少记录原书工具、当时用途、当前状态、现代替代、配置差异、制品差异和迁移退出条件。稳定原则是单一制品、内容寻址、资源先于入口、接口契约和可回滚;易变部分是插件 API、开发服务器协议、分支策略、CI 平台与 CDN 配置。

完整公开目录逐项讲解

第5章 部署

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“冻结发布制品”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.1 部署流程的设计原则

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“执行代码审查”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.1.1 速度——化繁为简

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“进入部署队列”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.1.2 协作——代码审查和部署队列

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“上传不可变资源”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.1.3 安全——严格审查和权限控制

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“切换入口版本”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.2 流程之外:前端静态资源的部署策略

部署先冻结可追溯制品,再经过审查与队列串行化共享环境变更。权限最小化,静态资源不可变,入口最后切换;服务器实现可变,安全顺序不变。

实验从“验证并回滚演练”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.2.1 协商缓存与强制缓存

内容哈希把资源身份绑定到字节,入口文档注入最终 URL。资源先发布、入口后切换,旧资源在回滚窗口内保留;覆盖同名文件会让 CDN 与浏览器出现跨版本错配。

实验从“冻结发布制品”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.2.2 Apache设置缓存策略

内容哈希把资源身份绑定到字节,入口文档注入最终 URL。资源先发布、入口后切换,旧资源在回滚窗口内保留;覆盖同名文件会让 CDN 与浏览器出现跨版本错配。

实验从“执行代码审查”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

5.3 总结

5.3 总结 需要放回“冻结发布制品、执行代码审查、进入部署队列、上传不可变资源、切换入口版本、验证并回滚演练”的完整交付链,明确输入、制品、环境、所有者和失败出口。

实验从“进入部署队列”开始:固定源码提交、依赖锁、配置和目标环境,先预测文件树与制品引用;每次只改变一个模板、模块、缓存、网络或权限条件,在首个偏离点保存证据。恢复后重放同一提交,不能以重新构建掩盖制品差异。

制品与失败矩阵

对象正常状态常见边界失败证据恢复条件
模板与源码文件树确定冲突、平台差异差异清单不覆盖用户文件
模块与构建摘要可追溯插件失败、依赖漂移模块图与日志同输入同制品
本地反馈增量更新准确HMR残留、Mock偏差状态与契约与生产差异明确
部署与缓存资源入口同版本网络、权限、并发发布制品与入口版本可探测并回滚

最小可运行实验

export const deploymentOrder = [
  "upload immutable hashed assets",
  "verify every asset",
  "switch entry document",
  "probe user route",
  "retain previous assets for rollback",
];
book: 前端工程化:体系设计与实践
edition: 2018-01
page: feng-05-deployment
sample: normal | boundary | failure | recovery
source_commit_fixed: true
artifact_digest_known: true
build_once: true
rollback_ready: true
freeze source + lockfile + config + target
predict file tree + module graph + asset URLs
change exactly one delivery condition
stop at the first divergent state
reuse the same artifact during recovery
verify entry, assets, probes, and rollback

常见误区与故障注入

四类样本与验收

样本注入方式必查证据通过条件
正常固定提交与依赖文件树、摘要、URL结果可重放
边界大模块、慢网络、并发变更增量范围、缓存、队列时间与资源受控
失败插件、权限、上传或探测失败首个错误与所有者阻断不污染环境
恢复同制品重试或回滚入口、资源、用户探测版本重新一致

目录证据:第5章 部署、5.1 部署流程的设计原则、5.1.1 速度——化繁为简、5.1.2 协作——代码审查和部署队列、5.1.3 安全——严格审查和权限控制、5.2 流程之外:前端静态资源的部署策略、5.2.1 协商缓存与强制缓存、5.2.2 Apache设置缓存策略、5.3 总结。本页按完整公开目录独立教学重构,不复制原书正文;9 个条目全部进入源码、机制、制品、失败和回滚证据链。

练习

小结

  • 部署队列:对应“冻结发布制品”的核心观察量。
  • 权限控制:对应“执行代码审查”的核心观察量。
  • 不可变资源:对应“进入部署队列”的核心观察量。
  • 协商缓存:对应“上传不可变资源”的核心观察量。
  • 强制缓存:对应“切换入口版本”的核心观察量。
  • 9 个本页公开目录条目已全部映射到交付链与版本账本。
  • 构建输出只是证据之一,制品同一性、环境状态与回滚共同决定是否通过。

术语表

讨论

评论区加载中…