프로젝트를 진행하면서 husky를 사용해 Git Hooks에서 자동으로 코드 포매팅과 린팅을 적용하고자 했습니다. 현재 설정에 따르면:
1. pre-commit 시점에서: 전체 코드 베이스에 prettier 포매팅이 적용됩니다.
2. pre-push 시점에서: 전체 코드 베이스에 eslint 검사가 수행됩니다.
//package.json
"scripts": {
"lint": "eslint --cache .",
"format": "prettier --cache --write .",
"postinstall": "husky install"
},
//.husky/pre-commit
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run format
///.husky/pre-push
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run lint
우리의 목표는 커밋할 파일만 포매팅하고 전체 코드 베이스의 린팅은 푸시하기 전에만 수행하는 것입니다.
lint-staged를 사용하여 스테이징된 파일에만 prettier 포매팅을 적용합니다. 즉,
npm i -D lint-staged
//package.json
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"prettier --write"
]
}
//.husky/pre-commit
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx lint-staged
이제 git commit 시에 스테이징된 파일에만 포매팅이 적용됩니다.
.husky/pre-push 파일의 내용은 그대로 유지합니다. 이렇게 하면 git push 직전에 전체 코드 베이스에 eslint 검사를 수행합니다.
이 설정은 개발 중간에 빠르게 반복되는 커밋 작업에서는 포매팅만 적용하여 빠른 작업 플로우를 유지하고, 코드를 원격 저장소에 푸시하기 전에 코드 품질을 확인하여 안정성을 보장합니다.
mrm을 이용하여 해당 명령어를 실행하면 lint-staged와 husky를 간편하게 설정해줄 수 있습니다. 여기서 mrm이란 오픈소스 프로젝트의 환경 설정을 동기화 하기 위한 도구입니다. mrm을 이용하면 lint-staged와 husky를 간편하게 설정해줄 수 있습니다
npx mrm lint-staged
REFERENCE