suyeonme
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(commitlint) 본문
commitlint로 Commit 컨벤션 적용하기
규모가 큰 팀에서 협업시, 커밋 컨벤션을 따르면 커밋의 일관성을 지킬 수 있다. 대표적으로 다음과 같은 커밋 컨벤션을 사용한다.
feat(AppController): Format response
feat: Format response
lintcommit을 이용해서 작성한 commit이 컨벤션을 지켰는지 검사해보자!
(1) 라이브러리 설치
# husky 설치
pnpm add --save-dev husky
pnpm exec husky init
# commitlint 패키지 다운로드
pnpm install --save-dev @commitlint/config-conventional @commitlint/cli
# commitlint.config.js 파일 생성
echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
commitlint.config.js에서 SyntaxError: Unexpected token 'export'에러가 나는경우, 아래와 같이 수정한다.
# 수정 전
export default { extends: ['@commitlint/config-conventional'] };
# 수정 후
module.exports = { extends: ["@commitlint/config-conventional"] };
(2) commit-msg 훅 스크립트 작성
아래 명령어는 .husky/commit-msg 파일을 추가한 뒤, commitlint 패키지를 실행한다.
# commit-msg 훅 스크립트 작성
echo "pnpm dlx commitlint --edit \$1" > .husky/commit-msg
(3) 작성한 훅이 정상적으로 동작하는지 확인
아래 명령어는 최근 두 커밋 메세지를 검사한다.
pnpm exec commitlint --from HEAD~1 --to HEAD --verbose
이전에 작성한 커밋이 있다면 해당 커밋이 출력된다.
(4) 변경 사항을 add한 뒤, 커밋 메세지 작성
컨벤션에 맞지않는 커밋을 작성한 경우
컨벤션에 맞는 커밋을 작성한 경우
모노레포에서 적용하는 경우
나의 경우, 아래의 디렉터리 구조를 가진 모노레포에 적용하였다. commitlint.config.js는 husky가 설치된 디렉터리에 추가한다.
만약 전체 워크스페이스에 Git hook을 적용해야한다면 루트에 husky를 적용해야한다. 이 경우 config-pnpm-scopes를 참고해볼 수 있을 것 같다.
.
├── packages/
│ ├── frontend
│ └── backend/
│ ├── src
│ ├── .eslintrc.js
│ ├── .prettierrc
│ ├── .commitlint.config.js
│ └── package.json <--- Husky 설치!
├── package.json
├── pnpm-workspace.yaml
└── pnpm-workspace.lock.yaml
└── .git
동일하게 commit-msg를 적용한 뒤, 커밋을 시도하자 Please add rules to your commitlint.config.js 에러가 발생했다.
이 경우, commit-msg 파일에서 git이 설치된 경로를 잡아주면 정상적으로 동작한다.
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
cd packages/backend # 추가!
pnpm dlx commitlint --edit $1
'프로그래밍👩🏻💻 > Git' 카테고리의 다른 글
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(Commit전 console.log 제거) (0) | 2024.05.16 |
---|---|
[Git] 모노레포 환경에서 Husky로 Git Hook 설정하기(lint-staged) (0) | 2024.05.06 |
[Git] Tag 명령어 정리 (0) | 2022.10.18 |
[Git] 파일의 대소문자 변경시, 반영안되는 경우 해결하기 (0) | 2022.07.18 |
[Git] multi line으로 커밋 메세지 작성하기 (0) | 2022.07.02 |