설명
Husky는 Git Hook을 더 쉽게 관리하고, 팀 협업에서 일관성을 유지할 수 있도록 돕는 JavaScript 라이브러리입니다.
가볍고 빠르며 광범위한 지원으로 다양한 환경과 워크플로어에 쉽게 통합해 사용 가능합니다.
기능
- Git Hook 설정 자동화: Git Hook을 직접 작성하지 않고,
package.json
또는 설정 파일에서 간단히 관리 가능. - Node.js와 통합: JavaScript를 사용하여 Git Hook 스크립트를 작성 가능하다.
- 일관성 유지: 프로젝트의 Git Hook 설정을 팀원과 공유 가능.
- 가볍고 빠름 (2KB, runs in
~1ms
) - custom directory : git 설정 옵션 core.hooksPath 설정하여 custom hooks 의 directory 따로 관리 가능.
- 브랜치별 훅: 특정 브랜치에만 적용되는 훅 작성 가능.
- POSIX 셸 스크립팅: 복잡한 스크립트 작성 가능.
- Git의 모든 클라이언트 훅 지원: 13가지 클라이언트 사이드 Git 훅 사용 가능 (예:
pre-commit
,post-merge
등등). - Git의 네이티브 훅 구조 준수: Git의 기본 훅 구성 방식과 호환되도록 설계.
설치 및 세팅
1. 설치
pnpm add --save-dev husky
2. 초기 세팅
pnpm exec husky init
.husky
디렉토리를 생성.- Git의 Hook 경로를
.husky
로 설정 (git config core.hooksPath .husky
실행).- core.hooksPath 옵션 : Git이 사용자 정의 Git Hook 스크립트를 찾는 디렉토리를 지정하는 데 사용됩니다. (Git의 기본 Hook 경로는
.git/hooks/
)
- core.hooksPath 옵션 : Git이 사용자 정의 Git Hook 스크립트를 찾는 디렉토리를 지정하는 데 사용됩니다. (Git의 기본 Hook 경로는
- 선택적으로 기본 Git Hook 파일(예:
pre-commit
)을 생성합니다. package.json
세팅 : husky 패키지가 설치 시 자동으로 실행"scripts": { "prepare": "husky" },
3. lint-staged 세팅 (선택)
Git의 Staged 파일에 대해서만 린트(Lint)나 기타 스크립트를 실행할 수 있게 해주는 도구
# 설치
pnpm add --save-dev lint-staged
// package.json 설정
...,
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix --max-warnings=0"
]
},
ex) 사용 예제
# husky/pre-commit
#!/bin/sh
echo "🔍 commit 이전에 lint 규칙을 적용합니다..."
if pnpm dlx lint-staged; then
echo "✅ 모든 lint 규칙이 성공적으로 적용되었습니다."
exit 0
else
echo "❌ lint 규칙 검사에서 오류가 발생했습니다."
exit 1
fi
사용법
git hook 이 실행 될 때 .husky/ 하위에 git hook 명과 동일한 파일에 내용이 실행됩니다.
1. git hook 추가 명령어
Husky는 Git 훅을 간단히 추가할 수 있도록 명령어
# pre-commit 훅 추가
npx husky add .husky/pre-commit "npm test"
# commit-msg 훅 추가
npx husky add .husky/commit-msg "npx commitlint --edit $1"
# pre-push 훅 추가
npx husky add .husky/pre-push "npm run build"
2. 스크립트 수정
.husky/pre-commit
같은 훅 파일을 생성된 후, 직접 수정하거나 추가 작업을 정의할 수 있습니다.
.husky/ 하위에 git hook 명과 동일한 파일 생성해 사용
참고
'프로그래밍' 카테고리의 다른 글
Buffer 의 이해 (0) | 2023.07.11 |
---|---|
[이슈] 패키지 일부 파일이 정상적으로 업데이트되지 않는 이슈 (npm) (0) | 2023.06.08 |
[ 개발 이슈 ] maxlen 적용 이슈 (0) | 2023.05.03 |