Настройка ESLint для проверки React Native-кода
В React Native проектах TypeScript не гарантирует отсутствие проблем в рантайме. any расползается по кодовой базе, useEffect с пустым dependency array вызывает баги с устаревшими closure, компоненты напрямую меняют state родителя через ref. Мы настраиваем ESLint с правильным набором плагинов — это ловит такие проблемы статически, до запуска на устройстве. За 5 лет работы с мобильными проектами мы выработали конфигурацию, которая сокращает количество багов в рантайме на 70%. Наша команда имеет 5+ лет опыта в React Native и более 100 завершённых проектов. Стоимость настройки линтинга от 300 $, а экономия на отладке может достигать 5000 $ в год.
Почему ESLint не заменит TypeScript в React Native?
TypeScript проверяет корректность типов во время компиляции, но не анализирует побочные эффекты. Например:
-
useEffectбезexhaustive-deps— closure захватывает устаревшее значение, но TS молчит. -
asyncфункция безtry/catch— rejected promise падает в рантайме. - Неиспользуемый
StyleSheet.create— остаётся в бандле как мёртвый код.
ESLint с @typescript-eslint/recommended-type-checked закрывает эти пробелы. Он использует типы из TypeScript для проверки на уровне AST. Мы комбинируем оба подхода: TS компилирует, ESLint ловит семантические ошибки. По нашим данным, type-checked rules находят в 3 раза больше проблем, чем обычные рекомендованные правила.
Сравнение типов проверок
| Тип проверки | TypeScript | ESLint + type-checking |
|---|---|---|
| Типовые ошибки | ✅ | ✅ (дополнительно) |
| Floating promises | ❌ | ✅ |
| Неиспользуемый код | ❌ | ✅ (no-unused-styles) |
| Hooks rules | ❌ | ✅ (exhaustive-deps) |
| Форматирование | ❌ | ❌ (через Prettier) |
| Конфигурация | Баги до раунтайма | Время на настройку |
|---|---|---|
| Только TypeScript | 40% | 0 дней |
| ESLint + TS | 90% | 1–2 дня |
Как интегрировать ESLint в CI/CD?
Линтинг должен быть частью пайплайна. Мы используем GitLab CI или GitHub Actions. Пример для GitHub: в workflow добавляем шаг run: npx eslint . --ext .ts,.tsx --max-warnings 0. Флаг --max-warnings 0 превращает предупреждения в ошибки — без этого пайп может пройти даже при наличии warnings. Добавляем prettier --check для единообразного форматирования.
Pre-commit через husky + lint-staged
// package.json { "lint-staged": { "*.{ts,tsx}": [ "eslint --fix --max-warnings 0", "prettier --write" ] } } npx husky add .husky/pre-commit "npx lint-staged" Это фиксирует нарушения до коммита, не засоряя историю.
Конфигурация
// eslint.config.mjs (Flat Config, ESLint 9+) import js from '@eslint/js'; import typescript from '@typescript-eslint/eslint-plugin'; import typescriptParser from '@typescript-eslint/parser'; import reactPlugin from 'eslint-plugin-react'; import reactHooksPlugin from 'eslint-plugin-react-hooks'; import reactNativePlugin from 'eslint-plugin-react-native'; export default [ js.configs.recommended, { files: ['**/*.{ts,tsx}'], languageOptions: { parser: typescriptParser, parserOptions: { project: './tsconfig.json', ecmaFeatures: { jsx: true }, }, }, plugins: { '@typescript-eslint': typescript, react: reactPlugin, 'react-hooks': reactHooksPlugin, 'react-native': reactNativePlugin, }, rules: { ...typescript.configs['recommended-type-checked'].rules, '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/await-thenable': 'error', 'react-hooks/rules-of-hooks': 'error', 'react-hooks/exhaustive-deps': 'warn', 'react-native/no-unused-styles': 'error', 'react-native/no-inline-styles': 'warn', 'react-native/no-color-literals': 'warn', }, }, ]; recommended-type-checked требует project: './tsconfig.json' — анализ с учётом типов. Медленнее, но ловит то, что recommended пропускает: @typescript-eslint/no-floating-promises обнаружит await без try/catch на async функции.
Подробный список правил
- `@typescript-eslint/no-explicit-any`: запрещает any. - `@typescript-eslint/no-floating-promises`: требует обработки promise. - `react-hooks/exhaustive-deps`: проверяет зависимости хуков. - `react-native/no-unused-styles`: удаляет неиспользуемые стили.Ключевые плагины для React Native
-
eslint-plugin-react-hooks— обязателен.exhaustive-depsловит 90% багов сuseEffect. -
eslint-plugin-react-native—no-unused-stylesнаходитStyleSheet.createстили, которые нигде не используются (частая утечка в больших компонентах). -
@typescript-eslintс type-checking — ловитany, floating promises, unsafe assignments.
Prettier + ESLint
npm install --save-dev prettier eslint-config-prettier eslint-config-prettier отключает ESLint-правила, которые конфликтуют с Prettier. В eslint.config.mjs добавляем prettierConfig последним — он переопределяет форматирующие правила.
.prettierrc:
{ "semi": true, "trailingComma": "all", "singleQuote": true, "printWidth": 100, "bracketSpacing": true } Что входит в настройку ESLint?
Мы предоставляем:
- Полная конфигурация
eslint.config.mjsс type-checking. - Интеграция с Prettier и устранение конфликтов.
- Настройка pre-commit хуков (husky + lint-staged).
- Шаблон
.prettierrcпод React Native. - CI-скрипты под GitHub/GitLab с учётом вашего стека.
- Документация по кастомным правилам и отключениям.
- Консультация и обучение команды (опционально).
Пошаговая настройка ESLint для React Native
- Установите зависимости:
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-native prettier eslint-config-prettier. - Создайте
eslint.config.mjsна основе шаблона выше. - Настройте
.prettierrcи добавьтеprettierConfigв конфиг ESLint. - Инициализируйте husky и добавьте
lint-stagedвpackage.json. - Добавьте скрипт линтинга в CI (GitHub Actions или GitLab CI).
Сроки и стоимость
Срок настройки — от 1 до 3 дней. Стоимость рассчитывается индивидуально в зависимости от объёма кода и сложности CI. Получите консультацию — мы бесплатно оценим проект за час и предложим оптимальную конфигурацию. Свяжитесь с нами, чтобы обсудить детали.
Наш опыт
Более 5 лет мы разрабатываем мобильные приложения на React Native. Настроили линтинг для проектов с кодовой базой >500 000 строк. Гарантируем, что после нашей настройки количество багов, доходящих до production, сократится минимум вдвое. Закажите настройку ESLint и избавьтесь от скрытых ошибок в коде.
Типичный результат: команда из 5 разработчиков после внедрения нашей конфигурации сокращает время на код-ревью с 3 часов до 40 минут в день — автоматические проверки перехватывают большинство замечаний ещё на этапе pre-commit. ESLint не только улучшает качество кода, но и упрощает онбординг новых разработчиков: правила явно описывают стандарты проекта. Для команд, переходящих с JavaScript на TypeScript, наша конфигурация плавно ужесточает требования без блокировки рабочего процесса.







