Husky и lint-staged

↑ 6.3 Качество кода и тестирование: продвинутый уровень · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: middle

Зачем это на собесе

Спрашивают, как обеспечить качество до попадания кода в репозиторий и почему хуки нельзя считать единственной защитой.

Суть

  • Husky — управление git-хуками в репозитории (хуки живут в .husky/, версионируются).
  • lint-staged — запуск команд только на изменённых (staged) файлах, что быстро.

Установка

npm i -D husky lint-staged
npx husky init
# .husky/pre-commit
npx lint-staged
{
  "lint-staged": {
    "*.{ts,vue}": ["eslint --fix", "prettier --write"],
    "*.{css,scss}": ["stylelint --fix", "prettier --write"],
    "*.{json,md}": "prettier --write"
  }
}

Что вешать на какие хуки

ХукЗадача
pre-commitlint-staged, быстрая проверка
commit-msgcommitlint
pre-pushtypecheck, связанные тесты

Нюансы

  • хуки можно обойти (--no-verify), поэтому CI — главная защита, хуки лишь ускоряют обратную связь;
  • тяжёлые проверки в pre-commit раздражают — переносите в pre-push и CI;
  • prepare-скрипт в package.json ставит хуки после npm install;
  • в monorepo lint-staged настраивается на уровне пакетов.

Вопросы с ответами