2.3 KiB
2.3 KiB
Pre-commit Checks: ESLint + Prettier для монорепозитория
Дата
2026-06-14
Проблема
При коммите нет локальных проверок кода. Ошибки линтера и форматирования обнаруживаются только вручную или на CI (которого пока нет).
Решение
Husky + lint-staged для pre-commit хука, который проверяет ESLint и Prettier только на staged файлах и блокирует коммит при ошибках.
Схема работы
git commit → husky pre-commit → lint-staged ├── staged *.ts (apps/backend) → eslint --max-warnings=0 ├── staged *.ts/tsx (apps/frontend) → eslint --max-warnings=0 └── staged *.ts/tsx (все) → prettier --check (с выводом diff) → любая ошибка → commit BLOCKED
Состав изменений
1. Frontend ESLint
- Установить в
apps/frontend(локально):eslint,@eslint/js,typescript-eslint,eslint-plugin-react-hooks,eslint-plugin-react - Создать
apps/frontend/eslint.config.js(flat config) - Добавить
"lint": "eslint src/"вapps/frontend/package.json
2. Husky + lint-staged
- Установить в корень:
husky,lint-staged npx husky init→ создать.husky/pre-commit- Конфиг lint-staged в корневом
package.json:apps/backend/src/**/*.ts→eslint --max-warnings=0apps/frontend/src/**/*.ts{,x}→eslint --max-warnings=0*.{ts,tsx}→prettier --check
3. Root lint script
- Расширить на оба workspace:
"lint": "npm run lint -w apps/backend && npm run lint -w apps/frontend"
Поведение при ошибках
- ESLint: показывает ошибки, commit blocked
- Prettier: показывает diff, commit blocked. Разработчик запускает
npm run formatвручную.
Файлы для создания
apps/frontend/eslint.config.js.husky/pre-commit
Файлы для изменения
apps/frontend/package.json— scripts + devDependencies- Корневой
package.json— lint-staged config + lint script + devDependencies