ESLint предоставляет возможность работы не только через CLI и конфигурационные файлы, но и через программный API. В этом режиме конфигурация формируется динамически и передаётся в экземпляр линтера напрямую, что позволяет интегрировать анализ кода в сложные пайплайны сборки, тестирования и серверные процессы.
Ключевым объектом программного интерфейса является класс
ESLint, предоставляемый пакетом eslint. Он
инкапсулирует механизм разрешения конфигурации, загрузки плагинов,
применения правил и выполнения анализа файлов или строкового кода.
import { ESLint } from "eslint";
Внутри экземпляра происходит построение конфигурационного дерева, которое может включать:
base config)extends)plugins)overrides)ignorePatterns)Программная конфигурация может быть задана непосредственно при
создании экземпляра ESLint.
import { ESLint } from "eslint";
const eslint = new ESLint({
overrideConfig: {
rules: {
semi: ["error", "always"],
quotes: ["error", "single"]
}
}
});
Параметр overrideConfig имеет наивысший приоритет и
перекрывает конфигурации из файлов .eslintrc, если они
используются в проекте.
Основные параметры конструктора:
cwd — базовая директория для поиска конфигурацийoverrideConfig — конфигурация, заданная программноoverrideConfigFile — путь к альтернативному
конфигурационному файлуuseEslintrc — включение/отключение загрузки
.eslintrcfix — автоматическое исправление ошибокignore — игнорирование стандартных
.eslintignoreESLint способен автоматически подхватывать конфигурационные файлы из
файловой системы. При создании экземпляра без
overrideConfig используется стандартный механизм
разрешения:
const eslint = new ESLint({
cwd: process.cwd()
});
В этом случае выполняется поиск конфигурации в следующем порядке:
eslint.config.js (Flat Config).eslintrc.js, .eslintrc.cjs,
.eslintrc.jsoneslintConfig в package.jsonЕсли используется Flat Config (eslint.config.js),
загрузка происходит через новый конфигурационный движок, основанный на
массиве конфигураций.
Flat Config представляет собой массив конфигурационных объектов,
которые могут быть переданы напрямую в overrideConfig.
const eslint = new ESLint({
overrideConfig: [
{
files: ["**/*.js"],
rules: {
"no-console": "warn"
}
},
{
files: ["**/*.test.js"],
rules: {
"no-console": "off"
}
}
]
});
Каждый элемент массива представляет слой конфигурации, применяемый последовательно.
Flat Config позволяет отказаться от глубокого наследования
extends, заменяя его композиционной моделью.
Программная модель конфигурации позволяет генерировать правила в зависимости от внешних условий: окружения, режима сборки или версии платформы.
import { ESLint } from "eslint";
const isProduction = process.env.NODE_ENV === "production";
const eslint = new ESLint({
overrideConfig: {
rules: {
"no-debugger": isProduction ? "error" : "off",
"no-console": isProduction ? "error" : "warn"
}
}
});
Такой подход позволяет формировать контекстно-зависимую конфигурацию без изменения файлов проекта.
В некоторых сценариях требуется полностью изолировать программную конфигурацию от файловой системы проекта.
const eslint = new ESLint({
useEslintrc: false,
overrideConfig: {
rules: {
eqeqeq: "error"
}
}
});
В этом режиме игнорируются все .eslintrc и
package.json конфигурации, используется только объект
overrideConfig.
Параметр overrideConfigFile позволяет явно указать
альтернативный конфигурационный файл, который будет иметь приоритет над
стандартным поиском.
const eslint = new ESLint({
overrideConfigFile: "./config/eslint.custom.config.js"
});
Такой механизм применяется при необходимости централизованного управления конфигурацией вне стандартной структуры проекта.
После создания экземпляра конфигурация становится частью внутреннего
состояния линтера. Основной метод анализа — lintFiles.
const results = await eslint.lintFiles(["src/**/*.js"]);
Процесс включает:
Результат представляет собой массив объектов с детальной информацией о нарушениях.
ESLint поддерживает анализ кода без файловой системы через
lintText.
const code = "const a = 1";
const results = await eslint.lintText(code, {
filePath: "virtual.js"
});
Параметр filePath используется для:
overridesКонтекст разрешения конфигурации зависит от параметра
cwd.
const eslint = new ESLint({
cwd: "/project/root"
});
Этот параметр влияет на:
extendsАвтоматическое исправление ошибок включается через
fix.
const eslint = new ESLint({
fix: true,
overrideConfig: {
rules: {
semi: ["error", "always"]
}
}
});
После анализа требуется дополнительный шаг для сохранения исправлений:
const results = await eslint.lintFiles(["src/**/*.js"]);
await ESLint.outputFixes(results);
ESLint поддерживает игнорирование файлов на уровне конфигурации и конструктора.
const eslint = new ESLint({
ignore: true,
overrideConfig: {
ignorePatterns: ["dist/", "node_modules/"]
}
});
Игнорирование может быть:
ignore)ignorePatterns).eslintignore)Плагины могут передаваться через overrideConfig.plugins
при условии, что они уже импортированы или доступны через node
resolution.
import pluginJs from "@eslint/js";
const eslint = new ESLint({
overrideConfig: {
plugins: {
js: pluginJs
},
rules: {
"js/no-undef": "error"
}
}
});
В Flat Config плагин обычно передаётся как объект с набором правил и конфигураций.
При программной загрузке конфигурации ESLint объединяет слои в следующем порядке приоритета:
overrideConfig (наивысший приоритет)overrideConfigFileeslint.config.js).eslintrc*Конфликты правил разрешаются по принципу последнего применённого значения.
Внутри ESLint реализовано кэширование:
Повторные вызовы lintFiles в рамках одного экземпляра
используют уже построенный граф конфигурации, что снижает накладные
расходы при анализе больших проектов.
В сценариях параллельной обработки возможно создание нескольких экземпляров с разными конфигурациями.
const base = new ESLint({
overrideConfig: { rules: { semi: "error" } }
});
const strict = new ESLint({
overrideConfig: { rules: { semi: "error", "no-console": "error" } }
});
Каждый экземпляр строит собственное конфигурационное дерево и не разделяет внутреннее состояние.
При корректной настройке cwd,
overrideConfig и отключении побочных источников
конфигурации достигается детерминированное поведение линтера. Это
критично для CI/CD систем, где требуется воспроизводимый результат
анализа независимо от локального окружения разработчика.
Конфигурация может формироваться на основе внешних данных:
function createESLint(env) {
return new ESLint({
useEslintrc: false,
overrideConfig: {
env: {
node: env === "node",
browser: env === "browser"
},
rules: {
"no-var": env === "production" ? "error" : "warn"
}
}
});
}
Flat Config использует линейную модель обработки:
files/ignoresПрограммная передача массива конфигураций позволяет полностью контролировать порядок применения правил без внешних файлов.
Программная загрузка конфигурации делает ESLint частью прикладной логики приложения. Конфигурация становится вычисляемым объектом, а не статическим файлом, что позволяет встроить линтер в системы: