Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: git, pre-commit hooks, linting, code quality, husky, lint-staged

Как настроить проверки перед коммитом (pre-commit hooks)?

Вопрос проверяет умение настраивать pre-commit hooks для автоматического запуска проверок кода перед созданием коммита, что необходимо для поддержания качества кода и соблюдения стандартов проекта.

Короткий ответ

Pre-commit hooks — это скрипты, которые Git запускает автоматически перед созданием коммита. Они используются для проверки кода, например, запуска линтеров, форматировщиков или тестов. Настроить их можно вручную, создав файлы в .git/hooks/, или с помощью инструментов вроде Husky для удобства. Это помогает предотвратить попадание в репозиторий кода с ошибками или несоответствующего стилю.

Длинный ответ

Pre-commit hooks — это механизм Git, позволяющий автоматически выполнять определённые действия (скрипты) непосредственно перед фиксацией изменений в репозитории. Их основная цель — обеспечить контроль качества кода, запуская проверки, такие как линтинг, форматирование или запуск модульных тестов, до того как изменения будут закоммичены. Это предотвращает попадание в историю проекта кода с очевидными ошибками или нарушающего соглашения команды.

Как настроить вручную

В каждом Git-репозитории есть скрытая папка .git/hooks/, содержащая примеры скриптов для различных событий. Чтобы создать pre-commit hook, нужно:

  • Перейти в папку .git/hooks/.
  • Создать или переименовать файл pre-commit.sample в pre-commit (удалив расширение .sample).
  • Сделать файл исполняемым (chmod +x pre-commit на Unix-системах).
  • Написать внутри скрипт на Bash, Python, Node.js или другом языке, который будет выполнять нужные проверки. Если скрипт завершится с ненулевым кодом возврата, коммит будет отменён.
#!/bin/bash
# Пример простого pre-commit hook, проверяющего наличие console.log в JavaScript файлах
echo "Running pre-commit checks..."
if git diff --cached --name-only | xargs grep -l "console\.log"; then
    echo "Error: Found console.log statements in staged files."
    exit 1
fi
echo "Checks passed."

Использование инструментов (Husky и lint-staged)

Ручная настройка неудобна для командной работы, так как хуки не копируются при клонировании репозитория. Поэтому в современных JavaScript/Node.js проектах популярна связка Husky и lint-staged.

  • Husky упрощает управление Git hooks, позволяя настраивать их через конфигурационный файл проекта (например, package.json).
  • lint-staged запускает определённые команды (например, ESLint, Prettier) только для файлов, добавленных в staging area (индекс), что ускоряет проверки.

Пример настройки в проекте на Node.js:

// package.json
{
  "scripts": {
    "prepare": "husky install"
  },
  "devDependencies": {
    "husky": "^8.0.0",
    "lint-staged": "^13.0.0",
    "eslint": "^8.0.0",
    "prettier": "^2.0.0"
  },
  "lint-staged": {
    "*.js": ["eslint --fix", "prettier --write"]
  }
}

После установки зависимостей инициализируйте Husky командой npm run prepare, затем создайте pre-commit hook, который запустит lint-staged:

npx husky add .husky/pre-commit "npx lint-staged"

Теперь при каждой попытке коммита будут автоматически запускаться ESLint и Prettier для всех изменённых JavaScript-файлов. Если проверки не пройдут, коммит будет отменён.

Где применяется

Pre-commit hooks широко используются в командной разработке для:

  • Проверки синтаксиса и стиля кода (ESLint, Pylint, RuboCop).
  • Автоматического форматирования (Prettier, Black).
  • Запуска модульных тестов для изменённых файлов.
  • Проверки наличия секретов (ключей, паролей) в коде.
  • Валидации сообщений коммитов (например, с помощью commitlint).

Вывод: Pre-commit hooks — это эффективный способ автоматизировать рутинные проверки и поддерживать высокое качество кодовой базы. Их стоит применять в любом проекте, особенно при работе в команде, чтобы минимизировать человеческие ошибки и обеспечить единый стандарт кода.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

  • Git

    Git

Ключевые слова

#git

#pre-commit hooks

#linting

#code quality

#husky

#lint-staged

Подпишись на React Developer в телеграм