개요

pre-commit 기능을 이용해 커밋 전에 eslint와 prettier를 적용하는 과정에서 husky가 제대로 작동하지 않아서 .githooks를 사용.

이유

husky를 이용한 git hooks의 경우 .git 폴더와 같은 위치에 있어야 한다.

현재 우리의 프로젝트는 /project 아래에 각각 /frontEnd/backEnd 디렉토리가 있다.

프로젝트 루트에 있는 .git을 이용해 버전을 관리하고 있기 때문에 husky는 프로젝트 루트에 설치되어야 했다.

하지만, 프로젝트 루트에 package.json이 생기는 것을 원하지 않았고 각 디렉토리에서 개별적으로 eslint 및 prettier 규칙을 적용하고 싶었기 때문에 다른 방법을 찾아야 했다.

과정

전체 코드에 대해 prettier와 eslint를 수행하는 것은 시간 적으로 비효율적이다.

현재는 코드의 양이 많지 않지만 추후 커밋을 수행할 때 많은 시간이 소모될 것을 우려해 lint-staged모듈을 사용하기로 했다.

해당 모듈은 stage된 변경 사항에 대해서만 특정 명령을 수행할 수 있도록 해준다.

또한, husky를 이용하는 대신에 .githooks/pre-commit 쉘 스크립트를 사용하도록 했다.

git config core.hooksPath {.githooks 디렉토리 위치}

// 예시: git config core.hooksPath ./frontEnd/.githooks

위의 명령어를 이용해 githook이 저장된 경로를 설정할 수 있었다.

하지만, 추가적인 문제점으로 현재 프로젝트에는 frontEnd와 backEnd가 함께 존재했으며 각 디렉토리의 eslint와 prettier는 서로 다른 규칙을 갖고 있었다.

현재 개발자가 frontEnd 개발자인지 backEnd 개발자인지 구분하여 적절한 hook을 사용하도록 해야했다.