Husky и lint-staged
↑ 6.3 Качество кода и тестирование: продвинутый уровень · ← Предыдущая · → Следующая
Зачем это на собесе
Спрашивают, как обеспечить качество до попадания кода в репозиторий и почему хуки нельзя считать единственной защитой.
Суть
- 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-commit | lint-staged, быстрая проверка |
commit-msg | commitlint |
pre-push | typecheck, связанные тесты |
Нюансы
- хуки можно обойти (
--no-verify), поэтому CI — главная защита, хуки лишь ускоряют обратную связь; - тяжёлые проверки в pre-commit раздражают — переносите в pre-push и CI;
prepare-скрипт вpackage.jsonставит хуки послеnpm install;- в monorepo lint-staged настраивается на уровне пакетов.
Вопросы с ответами
Почему lint-staged, а не линтить весь проект в pre-commit?
Полный прогон медленный. lint-staged обрабатывает только изменённые файлы — быстро и достаточно, чтобы новый код был чистым.
Можно ли полагаться только на хуки?
Нет. Их обходят
--no-verify, они не стоят у нового участника. Обязательная проверка — в CI.