Vibe Tutorial
无服务器部署与 CI CD 自动化

11.8 Hooks与CI CD理念

Tip

真正的负责任,是让错误根本没有机会走出你的电脑。


1. 为什么要学这个?

没有 Hooks 的世界

  1. 你写了一个拼写错误 cons a = 1
  2. git commit -> git push
  3. 你去冲了杯咖啡。
  4. 5 分钟后,邮件响了:"CI Build Failed"
  5. 你被全团队嘲笑(或者至少很尴尬)。

有 Hooks 的世界

  1. git commit
  2. 终端:"ESLint Error: 'cons' is not defined."
  3. 提交被拦截。你改好,没人知道你犯过错。

2. 核心概念:Shift Left (左移)

在软件工程中,发现错误越早,修复成本越低

  • IDE (Lint): 毫秒级反馈。
  • Git Hooks (Husky): 秒级反馈 (Commit 时)。
  • CI (Actions): 分钟级反馈 (Push 后)。
  • Production: 灾难级反馈 (用户投诉)。

Hooks 就是你的"小区保安"。没带门禁卡 (代码格式不对),门都不让你出。


3. 解决方案 (HOW)

1. 配置 Husky (最流行的 Hooks 工具)

npx husky-init && npm install

2. 配置 pre-commit (提交前检查)

.husky/pre-commit 文件里:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# 运行 lint-staged (只检查暂存区的文件,速度快)
npx lint-staged

3. 配置 lint-staged

package.json 里:

"lint-staged": {
  "*.{js,ts,tsx}": [
    "eslint --fix",       // 自动修复 Lint 错误
    "prettier --write"    // 自动格式化
  ]
}

效果:当你 git commit 时,它会自动帮你格式化代码。如果不符合规范,commit 直接失败。

防御体系图

graph TD
    Code["写代码"] -->|"Step 1: IDE 提示"| Local["本地电脑"]
    Local -->|"Step 2: Pre-commit (Husky)"| Git["Git 暂存区"]
    
    Git -->|"Step 3: CI Pipeline (GitHub)"| Cloud["云端仓库"]
    
    Cloud -- Fail --> Reject["❌ 只有 5 分钟之后才知道"]
    Git -- Fail --> FastReject["❌ 马上知道 (推荐)"]
    
    style FastReject fill:#c8e6c9,stroke:#2e7d32
    style Reject fill:#ffcdd2,stroke:#c62828

4. 真实案例

Story

"Space vs Tab" 的圣战终结者

某团队里有两个流派:Space 派 (缩进用空格) 和 Tab 派。 他们经常因为格式问题互相覆盖代码,导致 git diff 一片红,全是无意义的空格变动。 技术负责人引入了 Prettier + Husky。 结果:无论你怎么写,在你 commit 的那一瞬间,代码都会被强制格式化为团队统一标准 (比如 2 Spaces)。 战争结束了。

Vibe 心法: 我们可以争论架构,争论逻辑,但永远按照标准格式化代码。 这种机械性的琐事,交给机器去自动化。 Husky 不仅是拦截错误的网,更是统一团队语言的强制翻译器。


5. 本章小结

  1. Fail Fast (快速失败):能在本地拦截的,绝不发到云端。
  2. Lint-staged:只检查修改过的文件,不要检查全量(太慢)。
  3. 互补:Hooks 是防君子不防小人 (可以被绕过),CI 是最后的底线。