린트나 프리티어를 사용할 때 명령어로 등록하여 사용해도 되지만, 명령어로 사용하면 코드를 작성한 이후 실행을 깜빡할 때가 많기 때문에 추천하지 않는다.
git
으로 소스코드를 관리한다면 githook
을 이용하여 lint
를 통과해야만 push
나 commit
을 허용하는 정책을 만들 수 있다.
husky
는 githook
을 쉽게 사용하는 방법을 제공한다. 커밋 전, 푸시 전 등 깃 커멘드 실행 시점 전, 후로 내가 원하는 명령어를 추가할 수 있다. 중간에 린트로 코드 검사를 하는 부분을 끼워 넣어보자.
npm install -D husky
npx install husky
위 명령어를 입력하면 프로젝트 상위에 .husky
라는 디렉토리가 생긴다.
npx husky add .husky/pre-commit "echo \"커밋 전\""
.husky
디렉토리 내부에 pre-commit
이라는 쉘 파일이 생성된다.
커밋할 때 echo
를 이용해 메시지가 출력된다.
npx husky add .husky/pre-commit "npx eslint app.js --fix"
이제 커밋 전에 "npx eslint app.js --fix"
를 실행한 뒤에 커밋을 한다.
정상적으로 잘 동작한다.
이전에 husky
를 통해서 깃 커밋 전에 자동으로 eslint
를 돌려 코드를 검사하는 것까지는 구현했다. 그런데, 프로젝트에서 다루는 파일이 너무 많아서 eslint
를 돌리는데만 해도 어마어마한 시간이 걸리면 어떻게 해야 할까?
그래서 커밋 시에 변경된 파일만 eslint
를 돌리는 기능을 제공하는 패키지가 있는데, 그게 바로 lint-staged
이다. lint-staged
는 변경된 (스테이징된) 파일만 린트를 수행하는 도구이다.
npm install -D lint-staged
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "커밋 전"
npx lint-staged
배치파일에서 위와 같이 설정하면 된다.
변경사항을 적용하고 커밋하려 했더니, 중간에 FAILED
가 떡하니 있다.
훅에서 이뤄지는 과정들이 성공하면 위와 같이 커밋이 잘 된다.
VScode의 경우 위의 확장 프로그램을 받으면 된다.
editor.formatOnSave
를 true
로 바꿔주면 저장할 때마다 자동으로 lint
가 적용된다.
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
위와 같이 설정해도 된다.