ESLint предоставляет несколько механизмов сохранения результатов анализа кода в файл, начиная от стандартного перенаправления stdout и заканчивая встроенными параметрами CLI и программным API. Основой вывода служит система форматтеров, которая определяет структуру итогового отчёта.
Результат работы ESLint формируется в два этапа:
Форматтер определяет вид вывода:
stylish)json, checkstyle,
junit)После форматирования результат может быть направлен в stdout или записан в файл.
Самый базовый способ сохранения результатов — использование перенаправления потока вывода командной оболочки:
eslint . > eslint-report.txt
В этом случае используется форматтер по умолчанию, а весь вывод CLI сохраняется в файл.
Для сохранения ошибок отдельно от стандартного потока применяется перенаправление stderr:
eslint . 2> eslint-errors.txt
Однако такой способ ограничен:
--output-file
(-o)Встроенный механизм ESLint для записи результата в файл основан на
параметре --output-file:
eslint . -o report.txt
или сокращённая форма:
eslint . -o report.txt
Особенности:
--formatПример с выбором форматтера:
eslint . -f stylish -o report.txt
--formatФормат вывода определяет структуру данных, которая будет записана в файл.
eslint . -f json -o report.json
Наиболее часто используемые форматтеры:
stylishЧеловекочитаемый формат по умолчанию.
eslint . -f stylish -o report.txt
jsonСтруктурированный формат для последующей обработки.
eslint . -f json -o report.json
JSON-формат включает:
junitИспользуется в CI/CD системах.
eslint . -f junit -o junit-report.xml
checkstyleПодходит для интеграции с Java-инструментами.
eslint . -f checkstyle -o checkstyle.xml
Формат json является наиболее универсальным для
программной обработки:
[
{
"filePath": "src/index.js",
"messages": [
{
"ruleId": "no-unused-vars",
"severity": 2,
"message": "'x' is assigned a value but never used",
"line": 1,
"column": 5
}
],
"errorCount": 1,
"warningCount": 0
}
]
Такой формат позволяет:
ESLint агрегирует результаты анализа всех переданных файлов:
eslint src/**/*.js -f json -o report.json
Результат:
Возможна регистрация кастомного форматтера, возвращающего произвольный формат вывода.
eslint . -f ./formatters/custom-formatter.js -o report.txt
Форматтер представляет собой функцию:
module.exports = function(results) {
return results
.map(file => `${file.filePath}: ${file.errorCount}`)
.join('\n');
};
Особенности:
При использовании ESLint как библиотеки вывод формируется вручную.
import { ESLint } from "eslint";
import fs from "fs";
const eslint = new ESLint();
const results = await eslint.lintFiles(["src/**/*.js"]);
const formatter = await eslint.loadFormatter("json");
const output = await formatter.format(results);
fs.writeFileSync("report.json", output);
Ключевые этапы:
lintFilesloadFormatterПри больших проектах используется потоковая запись:
import fs from "fs";
import { ESLint } from "eslint";
const eslint = new ESLint();
const results = await eslint.lintFiles(["src"]);
const formatter = await eslint.loadFormatter("json");
const stream = fs.createWriteStream("report.json");
stream.write(await formatter.format(results));
stream.end();
Такой подход снижает нагрузку на память при больших объёмах данных.
Вывод в файл часто используется в автоматизированных пайплайнах:
eslint . -f json -o eslint-report.json
Далее файл:
ESLint завершает работу с кодом выхода:
0 — ошибок нет1 — найдены ошибкиЗапись в файл происходит независимо от exit code:
eslint . -f json -o report.json
Даже при ошибках файл формируется полностью.
Вывод можно дублировать:
eslint . -f stylish | tee report.txt
или через параметр:
eslint . -f json -o report.json
Различие:
tee работает на уровне shell--output-file работает внутри ESLintСуществуют технические особенности:
ESLint не поддерживает одновременный вывод в несколько файлов напрямую, но применяется обходной механизм:
eslint . -f json -o report.json
eslint . -f stylish
Либо через кастомный форматтер, который пишет в несколько потоков.
Система форматтеров является центральным элементом механизма записи:
Разделение анализа и представления данных делает механизм вывода гибким и расширяемым.