49 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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