# 配置提交前钩子 (setup-pre-commit)

> 在当前仓库配置 Husky pre-commit 钩子，用 lint-staged 运行 Prettier，并加入类型检查和测试。

- 分类: [代码规范](https://www.myskills.tools/zh/categories/code-standards/)
- 来源: 社区 · Matt Pocock
- 代码仓库: https://github.com/mattpocock/skills/tree/main/skills/misc/setup-pre-commit (commit 3216582)
- SKILL.md: https://github.com/mattpocock/skills/blob/main/skills/misc/setup-pre-commit/SKILL.md
- 安装命令: `npx skills add mattpocock/skills --skill setup-pre-commit`
- 许可证: MIT
- 兼容工具: Claude Code, Codex, Copilot, Gemini CLI
- 权限: read-repo ✓, write-files ✓, shell ✓, network ✓
- 状态: 扫描通过
- 规则扫描无法覆盖所有风险，安装前请阅读此技能的 SKILL.md，确认权限后再使用。
- ⚠ 会安装开发依赖、添加 git pre-commit 钩子并自动提交改动。

## 核心规则

钩子命令要换成检测到的包管理器，仓库没有 typecheck 或 test 脚本时就省略对应行并告知用户。

## 执行阶段

1. **检测并安装** — 根据锁文件判断 npm、pnpm、yarn 或 bun，并把 husky、lint-staged、prettier 装为 devDependencies。
2. **初始化 Husky** — 运行 npx husky init，再写入 .husky/pre-commit，依次执行 lint-staged、typecheck 和 test。
3. **写入配置** — 创建 .lintstagedrc 对所有暂存文件运行 prettier --ignore-unknown --write，没有 Prettier 配置时才创建 .prettierrc。
4. **验证并提交** — 检查各文件和 prepare 脚本，运行 npx lint-staged，然后提交改动，让新钩子跑一遍作为冒烟测试。

## 权限说明（据 SKILL.md 整理）

| 能力 | 是否需要 | 说明 |
|---|---|---|
| 文件写入 | 部分需要 | 只创建或修改 .husky/pre-commit、.lintstagedrc、.prettierrc 和 package.json。 |
| 命令执行 | 部分需要 | 运行包管理器安装命令、npx husky init、npx lint-staged 和 git 提交。 |
| 网络外发 | 部分需要 | 仅在安装依赖时访问包管理器的软件源。 |

## SKILL.md 头部信息（YAML）

```yaml
---
name: setup-pre-commit
description: Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
---
```

首页: https://www.myskills.tools/zh/ · URL: https://www.myskills.tools/zh/skills/setup-pre-commit/
