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

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

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • 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 — искать баги. Настройте один раз, закоммитьте конфиги в репозиторий и забудьте о спорах о пробелах и точках с запятой в код-ревью.

    Иконка глаза4

    Комментарии

    0

    Постройте личный план изучения Основы Git до уровня Middle — бесплатно!

    Основы Git — часть карты развития Frontend, Backend, DevOps

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

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

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

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

    Основы JavaScript

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

    Продвинутый JavaScript

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

    TypeScript с нуля

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

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

    Картинка поста TypeScript с нуля за день: типы, интерфейсы и дженерики
    Иконка аватараАнтон
    Иконка календаря06 мая 2026
    TypeScriptJavaScriptFrontendjuniorИконка уровня junior

    TypeScript с нуля за день: типы, интерфейсы и дженерики

    TypeScript с нуля: разбираем базовые типы, интерфейсы и дженерики за один день. Практические примеры кода и частые ошибки новичков.

    Иконка чипа0
    Иконка глаза248
    Иконка комментариев0
    Картинка поста Паттерны проектирования в JavaScript: Singleton, Factory, Observer
    Иконка аватараАнтон
    Иконка календаря24 мая 2026
    JavaScriptПаттерны проектированияАрхитектураmiddleИконка уровня middle

    Паттерны проектирования в JavaScript: Singleton, Factory, Observer

    Паттерны проектирования в JavaScript: разбираем Singleton, Factory и Observer с примерами кода, типичными ошибками и практическими сценариями применения.

    Иконка чипа0
    Иконка глаза36
    Иконка комментариев0
    Картинка поста Асинхронный JavaScript: callbacks, Promise, async/await по порядку
    Иконка аватараАнтон
    Иконка календаря19 мая 2026
    JavaScriptАсинхронностьPromise+ 1juniorИконка уровня junior

    Асинхронный JavaScript: callbacks, Promise, async/await по порядку

    Асинхронный JavaScript: разбираем callbacks, Promise и async/await по порядку. Эволюция подходов, примеры кода и частые ошибки начинающих.

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