# 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=0` - `apps/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