Husky и Git hooks

Husky — это инструмент для работы с Git hooks, который позволяет интегрировать различные процессы в жизненный цикл репозитория. В сочетании с Solid.js Husky позволяет автоматизировать задачи, такие как линтинг, тестирование и сборка, перед каждым коммитом или пушем, что способствует повышению качества кода и улучшению процесса разработки.

Что такое Git hooks?

Git hooks — это скрипты, которые выполняются автоматически на различных этапах работы с репозиторием. Например, можно настроить Git hooks для проверки кода перед коммитом, выполнения тестов перед пушем в удалённый репозиторий или других операций.

Git предоставляет множество различных хуков:

  • pre-commit — выполняется перед созданием коммита.
  • commit-msg — проверяет сообщение коммита.
  • pre-push — выполняется перед пушем в удалённый репозиторий.
  • post-merge — выполняется после слияния веток.

Эти хуки могут использоваться для различных задач, таких как автоматический запуск линтера, тестов, сборки проекта или проверки стиля кода.

Husky: что это и зачем он нужен?

Husky упрощает настройку и использование Git hooks. В отличие от стандартных скриптов Git, Husky предоставляет удобный API для интеграции хуков с вашим проектом, позволяя легко управлять их поведением и настройками. Husky совместим с любыми проектами, включая те, которые используют Solid.js, и может интегрироваться с инструментами, такими как ESLint, Prettier, Jest и другие, что значительно повышает автоматизацию и улучшает качество кода.

Husky предлагает несколько преимуществ:

  • Простота в установке и настройке.
  • Легкость в интеграции с другими инструментами.
  • Централизованное управление хуками через package.json или конфигурационные файлы.

Установка Husky

Для начала работы с Husky необходимо установить его в проект. Это можно сделать с помощью менеджера пакетов npm или yarn.

npm install husky --save-dev

После установки Husky необходимо активировать его в проекте с помощью команды:

npx husky install

Эта команда создаст каталог .husky, в котором будут храниться все настройки и скрипты для хуков.

Настройка Git hooks с Husky

После установки Husky можно настроить Git hooks, добавив их в каталог .husky. Например, можно добавить hook для запуска линтера перед каждым коммитом, что поможет избежать попадания в репозиторий некорректного кода.

Создание хука для pre-commit:

npx husky add .husky/pre-commit "npm run lint"

Этот скрипт будет запускать команду npm run lint перед каждым коммитом, чтобы проверять код на наличие синтаксических ошибок.

Интеграция с ESLint и Prettier

Для проекта на Solid.js важно соблюдать стиль кода, чтобы код был читаемым и соответствовал общим стандартам команды. Интеграция с линтерами, такими как ESLint и Prettier, поможет автоматически следить за соблюдением этих стандартов.

  1. Установка ESLint и Prettier:
npm install eslint prettier eslint-plugin-solid --save-dev
  1. Настройка конфигурации ESLint для Solid.js. Создайте или обновите файл .eslintrc.json:
{
  "extends": [
    "eslint:recommended",
    "plugin:solid/recommended"
  ],
  "env": {
    "browser": true,
    "node": true
  },
  "rules": {
    "solid/jsx-no-duplicate-props": "warn",
    "solid/jsx-no-undef": "error"
  }
}
  1. Настройка Prettier. Добавьте файл .prettierrc для определения правил форматирования:
{
  "semi": true,
  "singleQuote": true,
  "trailingComma": "es5"
}

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

npx husky add .husky/pre-commit "npm run lint && npm run format"

Пример настройки хука для тестов

Немаловажным аспектом разработки является автоматическая проверка корректности работы приложения. Для этого часто используют тестирование с такими инструментами, как Jest. Husky позволяет запускать тесты перед пушем, чтобы убедиться, что изменения не нарушили функциональность приложения.

Для настройки хука pre-push для запуска тестов с использованием Jest, добавьте следующий код:

npx husky add .husky/pre-push "npm run test"

Таким образом, перед каждым пушем будет выполняться команда npm run test, которая запускает тесты и предотвращает пуш в случае ошибок.

Рекомендации по использованию Husky в проекте на Solid.js

  1. Согласованность стиля кода: Использование линтеров (например, ESLint) и форматтеров (Prettier) помогает поддерживать единый стиль кода. Автоматизация проверки стиля с помощью Husky ускоряет этот процесс и уменьшает количество ошибок.

  2. Автоматизация тестирования: Запуск тестов с помощью Git hooks позволяет убедиться в корректности кода перед тем, как он попадет в общий репозиторий. Это снижает вероятность появления багов.

  3. Использование с CI/CD: Husky идеально подходит для интеграции с системами непрерывной интеграции и доставки. Хуки могут использоваться для выполнения предварительных проверок перед сборкой или развертыванием, что гарантирует более стабильные релизы.

  4. Прозрачность процессов: Все настройки хука и связанные с ними команды хранятся в репозитории, что позволяет каждому разработчику видеть и использовать единые правила для работы с кодом.

  5. Оптимизация производительности: Применение Husky позволяет уменьшить время, затрачиваемое на проверку кода, путём фокусировки на только что изменённых файлах, что делает процесс разработки более эффективным.

Заключение

Husky позволяет значительно улучшить рабочие процессы в команде, автоматизируя важные этапы разработки, такие как линтинг, форматирование и тестирование. Его интеграция с проектами на Solid.js поможет избежать множества ошибок, повысив качество кода и ускорив разработку.