Node - husky, lint-staged


CI/CD 를 설정하는 과정에 있어서 저장소 코드를 build 할 때 lint 에서 에러가 발생하는 부분이 있었다.
CI/CD 파이프라인이 깨져서 다시 돌릴 경우 시간이 아까워서 huskylint-staged 를 동록하게 되었다.

husky

NPM 으로 관리되는 프로젝트에서 git hooks 를 쉽게 다룰 수 있게 해주는 라이브러리이다.
git hooks 이 낯설 수도 있는데 FE 프레임워크의 훅들과 똑같다고 생각하면 된다. 등록을 할 경우 특정 시점에 원하는 동작을 할 수 있게끔 해준다! 👍

간단하게 아래와 같은 git hooks 들이 있고 husky 없이 직접 사용하는 방법도 어렵지 않으니 궁금하시다면 갓:구글 님께 문의를 넣어보자.

설명
pre-commit commit 을 실행하기 이전
prepare-commit-msg commit 메세지를 작성하고 편집기를 실행하기 전
commit-msg commit 메세지 등록 후 commit 완료 직전
post-commit 변수, 함수명 일괄 변경
pre-rebase rebase 하기 전
post-rewrite rebase, merge 등 commit 을 변경하는 명령실행 후
post-merge merge 완료 후
pre-push 데이터를 remote로 push 하기 전

이전 버전에서는 package.json 이나 .huskyrc 와 같은 파일에서 간단하게 작성하면 돌아갔었는데 버전 업 되면서 sh 을 작성하도록 변경되었다.

husky Version ~4.x

// package.json

{
    "scripts": {
        "install": "node husky install",
    }

      ...
    "husky": {
      "hooks": {
          "pre-commit": "echo 'Hello'",
          "pre-push": "npm test"
      }
    }
}

husky Version 5~

자세한 내용은 공식사이트를 참조하자 어렵지 않다. husky npm 사이트

// package.json

{
    "scripts": {
      "prepare": "husky install",
    }
      ...
}

lint-staged

스테이지에 올라간 파일들만 lint 해주는 라이브러리다 lint-staged - Github
사용법이 어렵지 않다. 인터넷이 된다면 튜토리얼을 따라하면 쉽게 적용할 수 있다.

// package.json

{
  ...

  "lint-staged": {
    "*.js": ["eslint --fix", "prettier --write"]
  }
}