Husky + lint-staged
Автоматический запуск линтера и форматтера только на staged-файлах при каждом
git commit— проблемный код не попадёт в репозиторий.
Задача
Нужно гарантировать, что в репозиторий не попадёт код с ошибками ESLint или неотформатированный Prettier. Проверять вручную или в CI — поздно; проверка должна быть на уровне git hook.
Решение
Установка:
npm install -D husky lint-staged
npx husky init
После husky init появится папка .husky/ и скрипт prepare в package.json.
.husky/pre-commit (создаётся автоматически, отредактируй):
npx lint-staged
package.json — добавь секцию lint-staged:
{
"scripts": {
"prepare": "husky"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{css,scss,json,md}": [
"prettier --write"
]
}
}
Проверка — измени файл и сделай коммит:
git add src/index.ts
git commit -m "test"
# lint-staged запустит ESLint и Prettier только для src/index.ts
Ключевые моменты
lint-stagedзапускает инструменты только на изменённых файлах, а не на всём проекте — быстро даже в больших репо.husky initавтоматически добавляет"prepare": "husky"вpackage.json— хуки устанавливаются приnpm install.- Порядок команд важен: сначала
eslint --fix, потомprettier --write(Prettier перезапишет то, что исправил ESLint). - Если хук должен провалить коммит — ESLint завершится с кодом
1при неисправимых ошибках, коммит отменится.
Варианты
- Добавить commit-msg хук для проверки формата сообщения коммита (Conventional Commits):
# .husky/commit-msg npx --no -- commitlint --edit $1 - pre-push хук — запуск тестов перед push:
# .husky/pre-push npm test