[Husky] Mac OS에서 husky가 안 먹힐 때

작성:    

업데이트:

카테고리:

태그:

문제 상황

window 노트북을 업무용 노트북으로 사용하다가 macbook pro로 갈아탔는데, 기존에 잘 되던 husky의 pre-commit 기능이 정상적으로 작동되지 않았다.

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

yarn type-check
yarn lint-staged

원래는 yarn type-checkyarn lint-staged를 commit 전에 실행하여 오류를 확인하고, 오류가 있으면 commit을 막는 기능을 하는데, mac os에서는 이게 작동되지 않았다.


그런데 이 이슈는 나만 겪은 것이 아니었다. husky github의 issue에서 비슷한 내용의 문제를 겪는 것을 발견할 수 있었다.


1


해결 방안

2

husky가 실행되지 않는 이유는 husky가 실행 권한이 없기 때문이라고 한다. 특히 window에서 프로젝트를 세팅한 뒤, WSL(Mac OS)에서 프로젝트를 실행하는 경우 문제가 생겼다고 한다. (나 역시 그랬다.)

3


아무튼 결론은 위 답변에서 제시한 명령어를 통해 husky에 실행 권한을 주면 된다.


chmod ug+x .husky/*


개선 사항

4

위의 명령어를 통해 권한을 부여하는 건 local 환경에만 적용된다. 하지만, 프로젝트를 공유하는 모든 사람들이 별도의 권한 설정 없이 사용하려면 package.json에 아래와 같이 설정해주면 된다.

{
  ...
  "prepare": "husky install | chmod ug+x .husky/*",
}


추가 사항

5

chmod가 작동하지만 정상적인 해결책이 아닙니다. 트릭입니다. 우리는 모두 다른 OS에서 작업하고 있으며 도구는 각 OS에서 올바르게 작동해야 하며 도구 설정은 간단한 커밋/체크아웃을 통해 다른 OS에서도 이식 가능해야 합니다. 유일하게 허용되는 것은 자동으로 오류를 찾아서 수정하는 일종의 자동 사후 조정입니다(그리고 변경 사항을 커밋하도록 요청할 수도 있습니다).” - deepL 번역

즉, 위의 방법은 정상적인 해결책이 아니라고 한다. husky가 정상적으로 작동하도록 하려면, husky가 설치되는 OS에 맞게 설치해야 한다고 하며 질문자는 다시 의문을 제기했다.


6

다만 mac과 window에서 모두 작동하는 사례가 있으니, 일단은 이렇게 해결하고 추후에 다시 확인해보기로 했다.


References

husky issue #1777: hook was ignored because it’s not set as executable

댓글남기기