Git

husky + lint-staged를 활용하여 git hook걸기

Kir93 2021. 11. 10. 12:45
728x90
반응형

이 글에서는 가장 많이 사용하는 git hook인 pre-commit을 기준으로 설명하겠다.

 

먼저 이 글을 작성하게 된 가장 큰 원인인 husky@4에서 사용하던 아래와 같은 방법을 사용할 수 없게 되면서 였다.

// package.json
{
  ...
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  }
}

일단 나와 같이 husky가 설치되어 있는 사람의 경우 아래를 실행하여 husky의 버전을 올리고 husky를 init 해준다.

npm i -D husky@latest // husky@7.0.4 기준 
npx husky install

처음 설치하는 사람의 경우 아래를 실행하여 간단하게 설치할 수 있다.

npx husky-init && npm install

위의 코드를 정상적으로 실행하였다면 project폴더에는. husky 폴더가 생성되었을 것이다.

그리고 협업이나 다른 PC에서의 작업할 때를 생각해 아래의 스크립트를 추가해 주면 좋다.

// package.json
"scripts": {
  ...
  "prepare": "husky install",
  ..
}

 

이제 간단하게 pre-commit 스크립트를 사용하기 위해 lint-staged를 설치해 준다.

npm i -D lint-staged

그리고 lint-staged에 pre-commit 하고 싶은 내용들을 추가한다.

// package.json
{
  ...
  "scripts": {
  ...
  "lint-staged": "lint-staged"
  },
  "lint-staged": {
    "**/*.{tsx,ts,jsx,js}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}

나는 project 내 모든 tsx, ts, jsx, js파일에 대하여 검사하기로 설정했다.

그리고 마지막으로 아래를 실행해 준다.

npx husky add .husky/pre-commit "npm run lint-staged"

그럼. husky파일에 pre-commit 스크립트가 생성되고 이것으로 모든 과정이 끝이다.

> lint-staged

✔ Preparing...
✔ Running tasks...
✔ Applying modifications...
✔ Cleaning up...
[main 89c8cd1] test
 1 file changed, 1 insertion(+), 1 deletion(-)

터미널에 생성한 task들이 나온 뒤 아래와 같이 검사 후 commit 된다면 정상 동작하는 것이다.

 

반응형

 

반응형