허스키를 사용한 선택적인 사전 커밋 확인

9262 단어 nodegittools
JavaScript 프로젝트에서 작업하는 경우 husky를 사용하여 ,
Prettier, Eslint 서식 지정 또는 TypeScript 검사를 수행할 수 있습니다.

커밋 메시지를 확인하는 것은 빠르지만 서식 지정 및 유형 확인을 실행하면 프로젝트가 커짐에 따라 더 많은 시간이 걸립니다.

lint-staged을 더 예쁘고 에스린트로 사용하실 수 있으며,
그러나 TypeScript 확인에 사용하는 것은 의미가 없습니다. git 준비 파일에서 유형을 변경하면 다른 파일에서 입력이 중단될 수 있기 때문입니다.

모든 엔지니어는 서로 다른 작업 흐름을 가지고 있습니다. TypeScript 컴파일러에서 문제를 해결하려면 tsc --watch 프로세스를 실행하고 손상된 부분이 없는지 확인할 수 있습니다.

계속 실행하면 랩탑 속도가 느려지므로 실행하고 싶지 않습니다tsc --watch. 커밋이 10,20,30초 이상 걸리더라도 커밋 전 단계에서 이 검사를 수행해도 괜찮습니다.

그러나이 사전 커밋을 선택 사항으로 만드는 방법은 무엇입니까? 따라서 수동으로 서식을 지정하고 유형을 확인하는 팀원은 좌절하지 않을 것입니다.

husky 버전 7에서는 bash 스크립트를 사용하여 사전 커밋 구성을 활성화합니다. 그렇다면 tsc 또는 lint-staged를 실행하기 전에 확인하지 않는 이유는 무엇입니까?!

이것은 .husky/pre-commit 파일의 시작 부분이 됩니다.

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

APP_PRE_COMMIT_OPTIONS="$(dirname "$0")/_/pre-commit.options"


따라서 pre-commit.options 폴더 안에 있는 .husky/_/라는 파일에 옵션을 넣을 수 있습니다.

.husky/_/ should have a .gitingore file that will ignore our option file.



다음으로 옵션 파일이 존재하지 않는 경우 일부 메시지를 인쇄해 보겠습니다.

YELLOW="\033[1;33m"
GREEN="\033[1;32m"
RESET="\033[0m"
if ! [ -f "$APP_PRE_COMMIT_OPTIONS" ]; then
  echo "${YELLOW}\nSkipping pre-commit hook."
  echo "If you want to use pre-commit for TypeScript check and lint-staged, run:\n"
  echo "  ${GREEN}echo -e 'APP_TS=true;\\\nAPP_LINT=true;' > $P_APP_PRE_COMMIT_OPTIONS${RESET}"
  echo ${YELLOW}\nIt will add some delay before committing!\n${RESET}"
  exit 0
fi





이제 옵션 파일을 소싱하고 사용자가 Linting을 활성화했는지 확인합니다.

source $APP_PRE_COMMIT_OPTIONS

if [ -n "${APP_LINT}" ] && [ "${APP_LINT}" == "true" ]; then
  echo "${GREEN}[husky] [pre-commit] [lint-staged]${RESET}"
  npx lint-staged
fi


더 많은 옵션을 추가하고 필요한 경우 확인할 수 있습니다!

최종 결과


.husky/pre-commit 파일은 다음과 유사해야 합니다.

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

APP_PRE_COMMIT_OPTIONS="$(dirname "$0")/_/pre-commit.options"

YELLOW="\033[1;33m"
GREEN="\033[1;32m"
RESET="\033[0m"
if ! [ -f "$APP_PRE_COMMIT_OPTIONS" ]; then
  echo "${YELLOW}\nSkipping pre-commit hook."
  echo "If you want to use pre-commit for TypeScript check and lint-staged, run:\n"
  echo "  ${GREEN}echo -e 'APP_TS=true;\\\nAPP_LINT=true;' > $P_APP_PRE_COMMIT_OPTIONS${RESET}"
  echo ${YELLOW}\nIt will add some delay before committing!\n${RESET}"
  exit 0
fi

source $APP_PRE_COMMIT_OPTIONS

if [ -n "${APP_TS}" ] && [ "${APP_TS}" == "true" ]; then
  echo "${GREEN}[husky] [pre-commit] [tsc]${RESET}"
  npx tsc
fi

if [ -n "${APP_LINT}" ] && [ "${APP_LINT}" == "true" ]; then
  echo "${GREEN}[husky] [pre-commit] [lint-staged]${RESET}"
  npx lint-staged
fi

좋은 웹페이지 즐겨찾기