Налаштування Husky для Git-хуків веб-проекту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Husky для Git-хуків веб-проекту
Проста
~2-3 години
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Husky для Git-хуків у веб-проектах

Husky дозволяє запускати скрипти при git-подіях: перед коммітом, перед пушем, при написанні повідомлення коміту. Практичне застосування: автоматичний запуск лінтера перед кожним коммітом запобігає потраплянню "зламаного" коду в історію.

Встановлення

npm install --save-dev husky
npx husky init

Після init створюється директорія .husky/ з базовим хуком pre-commit і додається скрипт "prepare": "husky" у package.json. Скрипт prepare запускається автоматично при npm install — нові члени команди отримують хуки без додаткових кроків.

pre-commit Хук

.husky/pre-commit:

npx lint-staged

Запускає lint-staged — інструмент, який застосовує команди тільки до поставлених на сцену файлів, а не на весь проект. Конфігурація lint-staged у окремому файлі.

commit-msg Хук

Перевіряє формат повідомлення коміту. Зручно з Conventional Commits:

npm install --save-dev @commitlint/cli @commitlint/config-conventional

.husky/commit-msg:

npx --no -- commitlint --edit $1

commitlint.config.mjs:

export default {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'revert', 'perf', 'ci'],
    ],
    'subject-max-length': [2, 'always', 72],
    'body-max-line-length': [2, 'always', 100],
  },
};

Правильний коміт: feat: add user authentication. Невірний: added stuff — хук заблокує.

pre-push Хук

Для запуску тестів перед пушем:

.husky/pre-push:

npm run test:ci
npm run typecheck

Тесты перед пушем, а не перед кожним коммітом — компроміс між швидкістю та надійністю. Якщо тесты повільні, pre-commit з тестами знищує продуктивність.

prepare-commit-msg Хук

Автоматично додає номер завдання з імені гілки до повідомлення коміту:

.husky/prepare-commit-msg:

#!/bin/sh
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2

# Витягуємо номер завдання з імені гілки (наприклад, feature/PROJ-123-description)
BRANCH_NAME=$(git symbolic-ref --short HEAD 2>/dev/null)
TICKET=$(echo "$BRANCH_NAME" | grep -oE '[A-Z]+-[0-9]+' | head -1)

# Додаємо тільки якщо ще не присутній і це не merge/rebase
if [ -n "$TICKET" ] && [ "$COMMIT_SOURCE" != "merge" ] && [ "$COMMIT_SOURCE" != "squash" ]; then
  CURRENT_MSG=$(cat "$COMMIT_MSG_FILE")
  if ! echo "$CURRENT_MSG" | grep -q "$TICKET"; then
    echo "[$TICKET] $CURRENT_MSG" > "$COMMIT_MSG_FILE"
  fi
fi

Обхід хуків в екстрених випадках

git commit --no-verify -m "hotfix: emergency patch"
git push --no-verify

--no-verify пропускає хуки. Це навмисна можливість для екстрених ситуацій, а не обхід системи — логується в історії git.

CI та хуки

У CI-середовищі хуки не потрібні — там лінтинг та тесты запускаються явно. Husky автоматично пропускає встановлення хуків, якщо встановлена змінна CI=true:

# husky не встановлює хуки при CI=true
HUSKY=0 npm ci  # або
CI=true npm install

Часові рамки

Встановлення Husky з pre-commit + lint-staged: 30–60 хвилин. Додавання commitlint та налаштування Conventional Commits: ще 30–60 хвилин.