第 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: truefreeze 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 个本页公开目录条目已全部映射到交付链与版本账本。
- 构建输出只是证据之一,制品同一性、环境状态与回滚共同决定是否通过。