49 lines
2.3 KiB
Markdown
49 lines
2.3 KiB
Markdown
# 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
|