Husky и pre-commit hooks

Автоматический запуск линтеров и тестов перед каждым коммитом через Git hooks.

Зачем нужно

  • Не пропускать плохой код в репозиторий
  • Автоматизация: линт + формат + тесты при каждом commit/push
  • lint-staged проверяет только изменённые файлы (быстро)

Где используется

  • Любой командный проект с Git

Установка

npm i -D husky lint-staged
npx husky init

Это создаст .husky/pre-commit и добавит prepare скрипт в package.json.

Конфигурация

package.json:

{
  "scripts": {
    "prepare": "husky"
  },
  "lint-staged": {
    "*.{js,ts,tsx}": ["eslint --fix", "prettier --write"],
    "*.{css,scss}": ["stylelint --fix", "prettier --write"],
    "*.md": ["prettier --write"]
  }
}

.husky/pre-commit:

npx lint-staged

Другие hooks

.husky/commit-msg (проверка формата коммита):

npx --no -- commitlint --edit $1
npm i -D @commitlint/cli @commitlint/config-conventional

commitlint.config.js:

export default { extends: ['@commitlint/config-conventional'] };

Как это работает

  1. git commit запускает .husky/pre-commit
  2. lint-staged берёт только staged файлы
  3. Запускает ESLint, Prettier, Stylelint на них
  4. Если ошибка -- коммит отменяется

Связанные темы

Ресурсы