Что такое pre-commit хуки и зачем они нужны?
Когда вы работаете в команде над одним проектом, важно, чтобы код оставался чистым, проверенным и соответствовал стандартам. Именно здесь в игру вступают pre-commit хуки — это автоматические проверки, которые запускаются до того, как изменения попадут в репозиторий.
Обычно такие хуки проверяют:
- форматирование кода
- ошибки линтинга
- прохождение тестов
- наличие забытых console.log или TODO
Если хоть одна проверка провалится, коммит не произойдёт. Это экономит нервы всей команде.
Почему именно Husky?

До 2020 года разработчики часто писали хуки вручную, используя shell-скрипты или инструменты вроде `pre-commit` на Python. Это работало, но плохо масштабировалось и было сложно поддерживать.
Husky стал прорывом. Он позволил легко добавлять Git-хуки в JavaScript/TypeScript-проекты с минимальной настройкой. А с версии 7.x (вышедшей в 2023 году) он ещё и упростился: теперь хуки настраиваются через обычные bash-файлы в `.husky/`, без лишней магии.
Минимальные требования для работы с Husky
Перед тем как погрузиться в настройку, убедитесь, что у вас есть:
- Node.js (версии 14 и выше)
- Git (естественно)
- NPM или Yarn
- Инициализированный Git-репозиторий
Без этого Husky не сможет интегрироваться в ваш проект.
Инструкция по настройке Husky хуков в 2025 году
Давайте по шагам разберём, как использовать Husky для pre-commit хуков:
- Установите Husky как dev-зависимость
```bash
npm install husky --save-dev
```
- Активируйте Husky в проекте
```bash
npx husky init
```
Эта команда создаст папку `.husky/` и добавит первый хук — `pre-commit` — с примером команды.
- Настройте ваш `pre-commit` хук
В файле `.husky/pre-commit` замените содержимое на нужные вам команды. Например:
```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint
npm test
```
Теперь при каждом коммите будут запускаться линтер и тесты. Если что-то пойдёт не так — коммит отклонится.
Дополнительные советы по использованию Husky
Чтобы получить максимум от Husky, используйте его вместе с другими инструментами:
- Lint-staged — позволяет запускать линтеры только на изменённых файлах
- Commitlint — проверяет формат сообщений коммита
- Pretty-quick — автоматически форматирует код с помощью Prettier
Добавим lint-staged для примера:
```bash
npm install lint-staged --save-dev
```
В `package.json`:
```json
"lint-staged": {
"*.js": ["eslint --fix", "git add"]
}
```
И в `.husky/pre-commit`:
```bash
npx lint-staged
```
Это ускорит работу, особенно в больших проектах, где полный линтинг может занять минуты.
Что изменилось в 2025 году?

С момента появления Husky в 2017 году он прошёл длинный путь: от сложного CLI-инструмента до лёгкого и понятного способа контроля качества кода. В 2025 году настройка pre-commit хуков Husky стала де-факто стандартом во многих фронтенд-командах.
Ключевые изменения последних лет:
- Отказ от `husky.config.js` в пользу bash-хуков в `.husky/`
- Совместимость с monorepo-архитектурой через Nx и Turborepo
- Улучшенная интеграция с GitHub Actions и CI/CD пайплайнами
Если вы всё ещё не используете pre-commit хуки с Husky — самое время начать.
Типичные ошибки при настройке
Настройка кажется простой, но есть нюансы. Вот на что стоит обратить внимание:
- Git не инициализирован — Husky не заработает без `git init`
- Хуки не исполняемые — убедитесь, что у скриптов есть права на исполнение (`chmod +x .husky/pre-commit`)
- Команды не возвращают ошибки — если в скрипте нет `exit 1` при ошибке, хук не остановит коммит
- Работа через GUI-клиенты Git — не все из них корректно обрабатывают хуки
Проверяйте поведение хуков через терминал, чтобы убедиться, что всё работает как надо.
Заключение

Инструкция по настройке Husky хуков не требует много времени, но даёт сильный контроль над качеством коммитов. Это особенно полезно, когда в проекте работает несколько человек и важно соблюдать единые правила.
Если вы задаётесь вопросом, как использовать Husky для pre-commit, просто следуйте шагам выше. Настройка займёт 10 минут, но избавит от десятков часов отлова ошибок в будущем.
Пусть Husky работает за вас — и пусть ваша кодовая база останется чистой, как слеза.



