Плагин ESLint представляет собой npm-пакет, расширяющий базовые возможности линтера дополнительными правилами, конфигурациями и иногда парсерами. В отличие от стандартного набора правил ESLint, плагины позволяют учитывать особенности конкретных фреймворков, библиотек и архитектурных подходов.
Типичная структура плагина включает:
rules)configs)Большинство плагинов публикуются в виде пакетов с префиксом
eslint-plugin-, однако при подключении используется
сокращённое имя без префикса.
Плагин устанавливается как обычная зависимость проекта. ESLint не включает сторонние плагины по умолчанию, поэтому они всегда добавляются отдельно.
npm install eslint-plugin-react --save-dev
yarn add eslint-plugin-react -D
pnpm add eslint-plugin-react -D
При установке важно учитывать версию ESLint. Многие плагины имеют
ограничения совместимости, указанные в peerDependencies.
При несовпадении версий возможны ошибки загрузки конфигурации или
частичная недоступность правил.
В традиционной системе конфигурации ESLint (JSON, YAML или JS-файл
.eslintrc) плагин подключается через поле
plugins.
{
"plugins": ["react"]
}
Сокращённое имя react соответствует пакету
eslint-plugin-react.
Подключение само по себе не активирует правила. Оно лишь делает их доступными для использования.
После подключения плагина правила становятся доступными через пространство имён:
{
"rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error"
}
}
Каждое правило имеет формат:
<plugin>/<ruleName>
Режимы работы правил:
"off" — отключено"warn" — предупреждение"error" — ошибкаМногие плагины предоставляют предустановленные конфигурации через
поле extends.
{
"extends": ["plugin:react/recommended"]
}
Формат записи:
plugin:<pluginName>/<configName>
Такие конфигурации могут включать:
Некоторые плагины требуют явной конфигурации через
settings.
{
"settings": {
"react": {
"version": "detect"
}
}
}
Подобный механизм используется для автоматического определения версии библиотек или поведения анализа AST.
Современная система ESLint использует плоскую конфигурацию, где плагины импортируются как модули.
npm install eslint-plugin-react -D
import react from "eslint-plugin-react";
export default [
{
plugins: {
react
},
rules: {
"react/jsx-uses-react": "error"
}
}
];
В отличие от .eslintrc, здесь отсутствует строковое
объявление плагина — используется объектное подключение.
Некоторые плагины экспортируют готовые наборы конфигураций:
import react from "eslint-plugin-react";
export default [
react.configs.recommended
];
Конфигурации могут быть массивами или объектами, которые объединяются с основной конфигурацией проекта.
Плагины тесно зависят от внутреннего AST ESLint. Несовместимость версий приводит к следующим проблемам:
Часто используется стратегия фиксирования версий:
eslint: ^8.x
eslint-plugin-react: ^7.x
Проекты обычно используют комбинацию нескольких расширений:
{
"plugins": ["react", "import", "jsx-a11y"]
}
И соответствующие правила:
{
"rules": {
"import/no-unresolved": "error",
"jsx-a11y/alt-text": "error",
"react/no-unknown-property": "error"
}
}
Некоторые плагины требуют замены парсера для поддержки нестандартного синтаксиса.
npm install @typescript-eslint/parser @typescript-eslint/eslint-plugin -D
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": ["plugin:@typescript-eslint/recommended"]
}
Парсер отвечает за преобразование кода в AST, а плагин — за правила анализа.
Многие плагины объявляют ESLint как peer dependency:
{
"peerDependencies": {
"eslint": ">=8.0.0"
}
}
Это означает отсутствие встроенной версии ESLint внутри плагина. Несоблюдение требований приводит к конфликтам зависимостей в node_modules.
В монорепозиториях плагины могут подключаться локально через workspace-зависимости:
pnpm add eslint-plugin-custom -w
Или через относительный пакет внутри репозитория. Такие плагины используются для унификации внутренних правил кодовой базы.
В flat config возможно программное формирование конфигурации:
import react from "eslint-plugin-react";
import importPlugin from "eslint-plugin-import";
const plugins = {
react,
import: importPlugin
};
export default [
{
plugins,
rules: {
"react/jsx-uses-react": "error",
"import/no-cycle": "warn"
}
}
];
Такой подход используется для масштабируемых конфигураций с условной активацией правил.
eslint-plugin-react вместо react)pluginsextends без установленного
плагина.eslintrc в одном проекте без
переходного слояESLint резолвит правила по следующему пути:
plugin name → exports → rules → rule name
Пример:
react/no-unknown-property
означает:
reactno-unknown-property внутри негоВ автоматизированных пайплайнах ESLint запускается как отдельный этап:
npx eslint "src/**/*.{js,ts,jsx,tsx}"
Плагины должны быть установлены на этапе npm ci или
аналогичном, иначе линтер завершится с ошибкой отсутствующих
модулей.
Некоторые плагины предоставляют разные уровни строгости:
recommendedstrictallПример:
{
"extends": [
"plugin:react/recommended",
"plugin:react/jsx-runtime"
]
}
Конфигурации объединяются сверху вниз, где последующие значения переопределяют предыдущие.