pc prompt-collection

setup-pre-commit (Matt Pocock)

원본 보기

현재 레포에 Husky pre-commit hook + lint-staged(Prettier) + typecheck + test 세트를 설치하는 SKILL. `npm`/`pnpm`/`yarn`/`bun` 자동 감지, `.husky/pre-commit` · `.lintstagedrc` · `.prettierrc` 부재 시 생성, 마지막에 smoke commit으로 hook 동작까지 확인.

작성자
Matt Pocock
라이선스
MIT
트리거
사용자가 'pre-commit 추가', 'husky 설정', 'lint-staged', 'commit-time formatting/typecheck/test' 요청 시
#skill#hook#pre-commit#husky#lint-staged#prettier#mattpocock

한 줄

Husky v9+ 기반 pre-commit hook을 단일 SKILL 호출로 설치. 패키지 매니저 감지부터 smoke test commit까지 7단계 체크리스트.

무엇을 설치하나

항목역할
huskygit hook 디렉터리 자동 관리, .husky/pre-commit 실행
lint-staged스테이징된 파일에만 명령 실행 (전체 격납 방지)
prettier스테이징 파일 자동 포맷 (--ignore-unknown로 못 읽는 파일은 skip)
.husky/pre-commitlint-staged → typecheck → test 순서로 실행
.lintstagedrc"*": "prettier --ignore-unknown --write"
.prettierrc부재 시 mattpocock 기본값 (tab 2, 80폭, double-quote, semi, ES5 trailing comma)

단계 (요약)

  1. 패키지 매니저 감지package-lock.json / pnpm-lock.yaml / yarn.lock / bun.lockb 중 존재하는 것
  2. devDeps 설치husky lint-staged prettier
  3. Husky initnpx husky init (자동으로 .husky/ 생성 + prepare: "husky" 추가)
  4. .husky/pre-commit 작성 — 셔뱅 불필요(Husky v9+)
    npx lint-staged
    npm run typecheck
    npm run test
  5. .lintstagedrc 작성
  6. .prettierrc 작성 (없을 때만)
  7. 검증 + smoke commit — 스테이지 → commit → hook 통과 여부 확인

적용 시 결정 포인트

  • typecheck/test 스크립트가 package.json에 없으면 해당 라인을 생략하고 사용자에게 알림 (없는 스크립트를 무조건 추가하지 않음)
  • .prettierrc가 이미 있으면 덮어쓰지 않음
  • 모노레포라면 lock 파일 감지가 루트만 보므로, 워크스페이스에서 실행하려면 SKILL 호출 시 cd <pkg> 후 실행

한계

  • Husky v9+ 기준 — v8 이하는 셔뱅/install 절차 다름
  • ESLint는 의도적으로 미포함 (Prettier만) — ESLint도 원하면 .lintstagedrceslint --fix 한 줄 추가
  • Windows 호환은 git-bash/WSL 통하면 OK, 순수 PowerShell은 husky가 별도 wrapper 필요

같이 보면 좋은

  • 본 컬렉션 git-guardrails-claude-code (Matt Pocock) — Claude Code 측 PreToolUse hook (런타임 차단)
  • claude-code-hooks — branch-guard/ssh-guard 등 PreToolUse hook 모음
## 한 줄

Husky v9+ 기반 pre-commit hook을 단일 SKILL 호출로 설치. 패키지 매니저 감지부터 smoke test commit까지 7단계 체크리스트.

## 무엇을 설치하나

| 항목 | 역할 |
|---|---|
| `husky` | git hook 디렉터리 자동 관리, `.husky/pre-commit` 실행 |
| `lint-staged` | 스테이징된 파일에만 명령 실행 (전체 격납 방지) |
| `prettier` | 스테이징 파일 자동 포맷 (`--ignore-unknown`로 못 읽는 파일은 skip) |
| `.husky/pre-commit` | `lint-staged → typecheck → test` 순서로 실행 |
| `.lintstagedrc` | `"*": "prettier --ignore-unknown --write"` |
| `.prettierrc` | 부재 시 mattpocock 기본값 (tab 2, 80폭, double-quote, semi, ES5 trailing comma) |

## 단계 (요약)

1. **패키지 매니저 감지** — `package-lock.json` / `pnpm-lock.yaml` / `yarn.lock` / `bun.lockb` 중 존재하는 것
2. **devDeps 설치** — `husky lint-staged prettier`
3. **Husky init** — `npx husky init` (자동으로 `.husky/` 생성 + `prepare: "husky"` 추가)
4. **`.husky/pre-commit` 작성** — 셔뱅 불필요(Husky v9+)
   ```sh
   npx lint-staged
   npm run typecheck
   npm run test
   ```
5. **`.lintstagedrc` 작성**
6. **`.prettierrc` 작성** (없을 때만)
7. **검증 + smoke commit** — 스테이지 → commit → hook 통과 여부 확인

## 적용 시 결정 포인트

- `typecheck`/`test` 스크립트가 `package.json`에 없으면 해당 라인을 **생략하고 사용자에게 알림** (없는 스크립트를 무조건 추가하지 않음)
- `.prettierrc`가 이미 있으면 **덮어쓰지 않음**
- 모노레포라면 lock 파일 감지가 루트만 보므로, 워크스페이스에서 실행하려면 SKILL 호출 시 `cd <pkg>` 후 실행

## 한계

- Husky v9+ 기준 — v8 이하는 셔뱅/install 절차 다름
- ESLint는 의도적으로 미포함 (Prettier만) — ESLint도 원하면 `.lintstagedrc`에 `eslint --fix` 한 줄 추가
- Windows 호환은 git-bash/WSL 통하면 OK, 순수 PowerShell은 husky가 별도 wrapper 필요

## 같이 보면 좋은

- 본 컬렉션 `git-guardrails-claude-code (Matt Pocock)` — Claude Code 측 PreToolUse hook (런타임 차단)
- `claude-code-hooks` — branch-guard/ssh-guard 등 PreToolUse hook 모음