Зачем нужны крючки Git?
Git hooks — это скрипты, которые Git выполняет локально до или после таких событий, как commit, push и receive.
Эти хуки полностью программируются с помощью сценариев bash. Примеры того, что может быть сделано:
- предварительная фиксация: Обеспечение соблюдения стандартов кодирования проекта.
- pre-push: Запускать тесты.
Это позволяет нам убедиться, что мы фиксируем правильные вещи в правильное время. Не ломать наш код только из-за умственной нагрузки, связанной с ручным процессом, о котором можно забыть.
Как начать
Добавьте Husky
Husky — это инструмент, который позволяет использовать Git hooks с помощью JavaScript, настроенного с помощью отдельных файлов для hooks в директории .husky/
.
Самый быстрый способ установить husky — использовать husky-init
, одноразовую команду для быстрой инициализации проекта с husky:
npx husky-init && npm install # npm
npx husky-init && yarn # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2+
pnpm dlx husky-init && pnpm install # pnpm
Она настроит husky, изменит package.json и создаст образец pre-commit hook, который вы сможете редактировать. По умолчанию он будет запускать тест при фиксации.
Чтобы добавить другой хук, используйте husky add
.
Если вам не удобно использовать husky-init
, вы можете найти другие варианты здесь.
Добавить lint-staged
Husky очень полезен, но он будет работать на базе git и не будет фокусировать команды в наших bash-скриптах для всех файлов, а не только для тех, которые мы хотим зафиксировать.
Lint Staged, похоже, решает эту проблему. Он позволяет вам запускать процесс против staged git файлов, которые соответствуют шаблону.
Установите lint-staged
, добавив его в свой локальный проект.
npm install lint-staged --save-dev
yarn add lint-staged -D
Добавьте его в package.json как скрипт("lint-staged": "lint-staged",
) и обратитесь к нему через хук pre-commit
. Если используется Husky, его можно найти в .husky/pre-commit
со следующим содержимым:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
yarn lint-staged
Существует несколько способов настройки lint-staged. Одним из них является наличие файла lint-staged.config.js
в корневой папке вашего проекта. В этом файле вы можете указать, какой процесс вы хотите запустить для каких типов файлов. Например:
module.exports = {
'*.{ts,tsx}': [() => 'yarn tsc:check', 'yarn format', 'yarn lint:fix', 'yarn test', 'git add .'],
};
Предыдущий фрагмент запускает проверку компилятора, форматирование, линтинг и тестирование перед добавлением исправленных staged-файлов в текущий коммит.
Заключение
С помощью этих двух инструментов мы теперь будем продвигать код, который будет проходить аналогичные проверки, чем наша система CI/CD.