PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Как настроить ESLint и Prettier в проекте раз и навсегда

    Как настроить ESLint и Prettier в проекте раз и навсегда

    Аватар автора Как настроить ESLint и Prettier в проекте раз и навсегда

    Антон Ларичев

    Иконка календаря25 мая 2026
    ESLintPrettierJavaScriptTypeScriptDevToolsjuniorИконка уровня junior
    Картинка поста Как настроить ESLint и Prettier в проекте раз и навсегда

    Введение

    ESLint и Prettier — два инструмента, без которых сложно представить современный JavaScript- или TypeScript-проект. ESLint находит ошибки и потенциальные проблемы в коде, Prettier приводит форматирование к единому стилю. По отдельности они полезны, но при совместной работе часто конфликтуют: оба пытаются управлять форматированием, а правила пересекаются.

    В этой статье разберём, как настроить ESLint и Prettier один раз так, чтобы они работали в связке без конфликтов, автоматически форматировали код при сохранении и блокировали коммиты с нарушениями. Подход универсален для React, Next.js, Node.js и любых других проектов на JS/TS.

    Установка зависимостей

    Для старта установим базовый набор пакетов. Если используете TypeScript, добавьте парсер и плагин для него.

    npm install --save-dev eslint prettier \
      eslint-config-prettier \
      @typescript-eslint/parser \
      @typescript-eslint/eslint-plugin
    

    Ключевой пакет здесь — eslint-config-prettier. Он отключает все правила ESLint, которые конфликтуют с Prettier. Раньше многие использовали eslint-plugin-prettier, чтобы запускать Prettier как правило ESLint, но сейчас официальная документация Prettier рекомендует этого избегать: подсветка ошибок форматирования замусоривает редактор и замедляет линтинг.

    Конфигурация ESLint

    С ESLint 9 по умолчанию используется flat config — файл eslint.config.js в корне проекта. Создадим минимальный, но рабочий конфиг для TypeScript-проекта.

    // eslint.config.js
    import js from '@eslint/js';
    import tseslint from 'typescript-eslint';
    import prettier from 'eslint-config-prettier';
    
    export default [
      // базовые рекомендации ESLint
      js.configs.recommended,
      // рекомендации для TypeScript
      ...tseslint.configs.recommended,
      // отключаем правила, конфликтующие с Prettier (всегда последним)
      prettier,
      {
        rules: {
          // запрещаем console.log, но разрешаем warn и error
          'no-console': ['warn', { allow: ['warn', 'error'] }],
          // неиспользуемые переменные с префиксом _ игнорируем
          '@typescript-eslint/no-unused-vars': [
            'error',
            { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
          ],
        },
      },
    ];
    

    Важный момент: prettier из eslint-config-prettier должен идти последним в массиве. Только так он сможет отключить конфликтующие правила, добавленные другими конфигами выше.

    Конфигурация Prettier

    Prettier настраивается отдельно, через файл .prettierrc или prettier.config.js. Конфиг намеренно минималистичен — у Prettier мало настроек, и это его философия.

    // prettier.config.js
    export default {
      // одинарные кавычки вместо двойных
      semi: true,
      singleQuote: true,
      // длина строки до переноса
      printWidth: 100,
      // 2 пробела для отступа
      tabWidth: 2,
      // запятая после последнего элемента в объектах и массивах
      trailingComma: 'all',
      // перенос стрелочных функций с одним аргументом
      arrowParens: 'always',
    };
    

    Не забудьте про .prettierignore — он работает по тем же правилам, что и .gitignore.

    node_modules
    dist
    build
    coverage
    .next
    

    Скрипты в package.json

    Добавим команды для запуска линтера и форматтера в package.json. Это пригодится и локально, и в CI.

    {
      "scripts": {
        "lint": "eslint .",
        "lint:fix": "eslint . --fix",
        "format": "prettier --write .",
        "format:check": "prettier --check ."
      }
    }
    

    format:check особенно удобен в CI: команда не меняет файлы, а только возвращает ненулевой код выхода, если форматирование нарушено.

    Интеграция с VS Code

    Чтобы код форматировался автоматически при сохранении, добавьте в проект файл .vscode/settings.json. Он переопределит пользовательские настройки только для этого репозитория — никаких сюрпризов для команды.

    {
      "editor.defaultFormatter": "esbenp.prettier-vscode",
      "editor.formatOnSave": true,
      "editor.codeActionsOnSave": {
        "source.fixAll.eslint": "explicit"
      },
      "eslint.useFlatConfig": true
    }
    

    Теперь при каждом сохранении файла Prettier форматирует код, а ESLint автоматически фиксит правила, которые умеет чинить.

    Pre-commit хуки через Husky и lint-staged

    Даже с автоформатированием в редакторе кто-то закоммитит непроверенный код. Решение — запускать линтер на staged-файлах перед коммитом.

    npm install --save-dev husky lint-staged
    npx husky init
    

    В package.json добавим конфиг lint-staged, который обработает только изменённые файлы — это быстро даже на больших проектах.

    {
      "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
          "eslint --fix",
          "prettier --write"
        ],
        "*.{json,md,css}": [
          "prettier --write"
        ]
      }
    }
    

    Затем в .husky/pre-commit пропишем запуск npx lint-staged. После этого ни один невалидный коммит не пройдёт.

    Частые ошибки

    Plugin Prettier внутри ESLint. Связка eslint-plugin-prettier и plugin:prettier/recommended создаёт шум в редакторе: каждая лишняя запятая подсвечивается как ошибка линтера. Используйте только eslint-config-prettier.

    Конфиг Prettier не последний. Если поставить prettier в середине массива конфигов ESLint, последующие конфиги могут вернуть конфликтующие правила. Правило простое — всегда последним.

    Разные версии в monorepo. В монорепозитории легко получить разные версии ESLint в пакетах. Выносите все linting-зависимости в корневой package.json и используйте workspaces.

    Игнорирование .prettierignore. Без него Prettier попытается форматировать сгенерированные файлы, lock-файлы и содержимое node_modules. Это медленно и иногда ломает сборку.

    Отключение правил по одному. Если приходится писать // eslint-disable-next-line в каждом втором файле — пересмотрите конфиг. Скорее всего, правило просто не подходит проекту.

    Заключение

    Правильная связка ESLint и Prettier настраивается за полчаса, но окупается на всём жизненном цикле проекта. ESLint берёт на себя качество кода, Prettier — единый стиль, eslint-config-prettier устраняет конфликты, VS Code форматирует при сохранении, а Husky с lint-staged защищают репозиторий от грязных коммитов.

    Главный принцип — каждая утилита делает только то, что умеет лучше всего. Не заставляйте ESLint форматировать, а Prettier — искать баги. Настройте один раз, закоммитьте конфиги в репозиторий и забудьте о спорах о пробелах и точках с запятой в код-ревью.

    Иконка глаза1 376

    Комментарии

    0

    Постройте личный план изучения React state менеджер Zustand до уровня Middle — бесплатно!

    React state менеджер Zustand — часть карты развития Frontend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Vue 3 и Pinia

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Next.js - с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.7
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Feature-Sliced Design

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.6
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Работа с DI-контейнером на Framework Foton
    Иконка аватараКонстантин
    Иконка календаря07 октября 2026
    di-контейнерframework FotonFotonmiddleИконка уровня middle

    Работа с DI-контейнером на Framework Foton

    Что такое DI-контейнер и как с ним работать с примерами для самых маленьких на примере системы сборщика и внедрения зависимостей с автоматическим разрешением аргументов конструктора через рефлексию на Framework Foton

    Иконка чипа0
    Иконка глаза47
    Иконка комментариев0
    Картинка поста Тестирование React-компонентов с Jest и React Testing Library
    Иконка аватараАнтон
    Иконка календаря07 октября 2026
    JestReact Testing LibraryТестирование+ 1middleИконка уровня middle

    Тестирование React-компонентов с Jest и React Testing Library

    Jest и React Testing Library: как настроить окружение, писать тесты на поведение пользователя, мокировать запросы и тестировать кастомные хуки.

    Иконка чипа0
    Иконка глаза37
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря07 октября 2026
    Claude CodeAI-инструментыDevOps+ 2middleИконка уровня middle

    Roo Code в VS Code: подключение Claude из России

    Roo Code начинает работать из России после одной правки в настройках: провайдер — Anthropic, в поле ключа — ваш API-ключ, в поле адреса — прокси, который отвечает без VPN и берёт оплату рублями. Само расширение ставится из Marketplace обычным порядком и остаётся нетронутым: ни форка, ни патча, ни туннеля. Ключ и адрес выдаёт [AI для кода](https://purpleschool.ru/ai-for-code). Ниже — установка, настройка провайдера, режимы Roo Code и ошибки, на которых спотыкается первое подключение.

    Иконка чипа0
    Иконка глаза72
    Иконка комментариев0
    Иконка чипа0