Пять плагинов ESLint, которые улучшают качество кода
Вы настроили ESLint. Он обнаруживает неиспользуемые переменные и указывает на отсутствующие точки с запятой. Но в вашей кодовой базе всё ещё накапливаются незаметные баги, несогласованные импорты и проблемы с доступностью, которые проскальзывают через код-ревью. Стандартных правил недостаточно.
ESLint 9 представил flat config (eslint.config.js), заменив устаревший формат .eslintrc. Это изменение упрощает интеграцию плагинов и делает конфигурацию более предсказуемой. Независимо от того, выполнили ли вы миграцию или всё ещё используете старый формат, правильные плагины превращают ESLint из базовой проверки в настоящий контроль качества.
Вот пять плагинов, которые решают реальные проблемы в современных frontend-проектах — без раздувания вашего инструментария.
Ключевые выводы
- typescript-eslint обеспечивает линтинг с учётом типов, который обнаруживает небезопасные паттерны доступа и забытые операторы
await - eslint-plugin-import обеспечивает гигиену модулей, проверяя пути, обнаруживая циклические зависимости и организуя импорты последовательно
- eslint-plugin-unicorn предоставляет более 100 правил, которые подталкивают к современным паттернам JavaScript и предотвращают незаметные баги
- eslint-plugin-jsx-a11y обнаруживает распространённые проблемы доступности в JSX до того, как они достигнут пользователей
- @eslint/css расширяет линтинг за пределы JavaScript, обнаруживая ошибки в таблицах стилей в рамках единого рабочего процесса
typescript-eslint: линтинг с учётом типов для TypeScript-проектов
Плагин @typescript-eslint интегрирует систему типов TypeScript в ваш процесс линтинга. В отличие от базовых синтаксических проверок, правила с учётом типов обнаруживают проблемы, требующие понимания типов вашего кода.
Рассмотрим функцию, которая может вернуть null. Линтинг с учётом типов выявляет небезопасные паттерны доступа, которые иначе проявились бы как runtime-ошибки в продакшене. Правила вроде no-floating-promises обнаруживают забытые операторы await, а no-unnecessary-condition идентифицирует мёртвые ветви кода.
Для больших кодовых баз typescript-eslint предлагает Project Service, который улучшает производительность за счёт повторного использования экземпляров программы TypeScript между файлами. Это важно при линтинге тысяч файлов в CI.
В flat config вы импортируете плагин напрямую и распространяете его рекомендуемые конфигурации. Настройка чисто интегрируется с моделью flat-config ESLint 9 при использовании стандартного инструментария typescript-eslint.
eslint-plugin-import: гигиена модулей и организация импортов
eslint-plugin-import предотвращает хаос, который накапливается в операторах импорта в растущей кодовой базе.
Плагин обнаруживает опечатки в путях до выполнения, гарантирует, что именованные импорты соответствуют фактическим экспортам, и выявляет циклические зависимости, вызывающие незаметные баги. Его правило no-extraneous-dependencies предотвращает импорт пакетов, не указанных в package.json — распространённый источник сбоев при развёртывании.
Правило import/order обеспечивает последовательную группировку: сначала внешние пакеты, затем внутренние модули, затем относительные импорты. Эта последовательность делает файлы легко читаемыми, а диффы чище во время код-ревью.
Для команд этот плагин устраняет споры о стиле организации импортов. Настройте его один раз, и автоисправление сделает всё остальное.
eslint-plugin-unicorn: категоричное предотвращение багов
eslint-plugin-unicorn предоставляет более 100 правил, которые обнаруживают незаметные проблемы и обеспечивают современные паттерны JavaScript.
Он выявляет Array.forEach, когда for...of был бы понятнее. Он обнаруживает new Array(5), когда вы имели в виду Array.from({ length: 5 }). Он предотвращает вызовы process.exit(), которые пропускают обработчики очистки.
Плагин подталкивает к современному синтаксису: предпочитая Array.includes() вместо indexOf() !== -1, предлагая String.replaceAll() вместо регулярных выражений с глобальными флагами и выявляя устаревшие методы Number.
Не каждое правило подходит каждой команде. Начните с рекомендуемого пресета, затем отключите правила, которые конфликтуют с соглашениями вашей кодовой базы.
Discover how at OpenReplay.com.
eslint-plugin-jsx-a11y: линтинг доступности JSX
eslint-plugin-jsx-a11y обнаруживает проблемы доступности в JSX до того, как они достигнут пользователей.
Плагин выявляет изображения без атрибутов alt, кнопки без доступных имён и поля форм без меток. Он обнаруживает использование autoFocus, нарушающее клавиатурную навигацию, и идентифицирует обработчики кликов на неинтерактивных элементах.
Эти правила не гарантируют соответствие WCAG — автоматизированные инструменты обнаруживают примерно 30% проблем доступности. Но они предотвращают наиболее распространённые ошибки и встраивают осведомлённость о доступности в ежедневную разработку.
Для команд, выпускающих пользовательские приложения, этот плагин необходим. Баги доступности затрагивают реальных пользователей и несут юридические последствия во многих юрисдикциях.
@eslint/css: линтинг за пределами JavaScript
ESLint теперь выходит за пределы JavaScript. Плагин @eslint/css привносит статический анализ в таблицы стилей, обнаруживая синтаксические ошибки и обеспечивая соглашения.
Аналогично, html-eslint проверяет структуру HTML, выявляя дублирующиеся ID, отсутствующие атрибуты lang и неправильную вложенность.
Эти плагины важны для проектов с CSS-модулями, HTML-шаблонами или библиотеками компонентов, где качество разметки влияет на рендеринг. Они объединяют ваш процесс линтинга под одним инструментом, а не требуют отдельных валидаторов.
Разделение ответственности: линтинг против форматирования
Одно уточнение: ESLint отвечает за качество кода, а не за форматирование. Позвольте Prettier управлять точками с запятой, кавычками и отступами. Используйте eslint-config-prettier для отключения правил ESLint, конфликтующих с Prettier, затем запускайте оба инструмента отдельно.
Это разделение сохраняет вашу конфигурацию ESLint сфокусированной на обнаружении багов, а не на обеспечении стилевых предпочтений.
Заключение
Эти пять плагинов решают различные проблемы: безопасность типов, гигиена импортов, современные паттерны, доступность и кросс-языковой линтинг. Добавляйте их постепенно. Сначала включите рекомендуемые пресеты, затем настраивайте правила по мере того, как ваша команда выявляет точки трения.
Цель — не максимальная строгость, а обнаружение реальных багов до их выпуска.
Часто задаваемые вопросы
Flat config ESLint 9 использует JavaScript-модули вместо JSON или YAML. Экспортируйте массив объектов конфигурации из eslint.config.js. Каждый объект может указывать файлы для таргетирования, плагины для использования и правила для применения. Документация ESLint предоставляет руководство по миграции, и большинство плагинов теперь включают примеры flat config в своей документации.
Да. Эти плагины нацелены на разные аспекты и редко пересекаются. typescript-eslint обрабатывает проверку типов, eslint-plugin-import управляет модулями, unicorn обеспечивает паттерны, jsx-a11y охватывает доступность, а @eslint/css обрабатывает таблицы стилей. Если возникают конфликты правил, отключите менее специфичное правило в вашей конфигурации.
Правила с учётом типов из typescript-eslint добавляют накладные расходы, поскольку требуют компилятора TypeScript. Для больших проектов включите Project Service для улучшения производительности. Другие плагины добавляют минимальные накладные расходы. Запускайте ESLint с флагом --cache, чтобы пропускать неизменённые файлы и ускорять повторные запуски.
Нет. Начните с рекомендуемого пресета каждого плагина, который включает проверенные правила. Отслеживайте опыт вашей команды и отключайте правила, которые создают трение, не обнаруживая реальных багов. Цель — практичное предотвращение багов, а не максимальная строгость.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.