В классической связке инструментов для качества кода ESLint отвечает за анализ структуры, потенциальных ошибок и соблюдение правил кодстайла, а Prettier — за детерминированное форматирование. Конфликт между ними возникает из-за пересечения зон ответственности: часть правил ESLint касается форматирования, тогда как Prettier полностью берет его на себя.
eslint-plugin-prettier решает эту проблему, превращая Prettier в правило ESLint. В результате форматирование перестает быть отдельным этапом пайплайна и становится частью линтинга.
Ключевая идея интеграции:
Плагин не форматирует код напрямую в момент анализа. Он:
Таким образом, любое несоответствие стилю Prettier становится ESLint-ошибкой.
Механизм можно представить как правило:
prettier/prettier: "error"
Типовая установка включает три зависимости:
npm install --save-dev eslint prettier eslint-plugin-prettier
Часто вместе используется дополнительный пакет:
npm install --save-dev eslint-config-prettier
Он отключает конфликтующие правила ESLint, связанные с форматированием.
{
"plugins": ["prettier"],
"extends": ["plugin:prettier/recommended"]
}
Конфигурация plugin:prettier/recommended автоматически
включает:
prettier/prettier: "error"При необходимости более тонкого контроля конфигурация может быть развернута вручную:
{
"plugins": ["prettier"],
"extends": ["eslint:recommended", "prettier"],
"rules": {
"prettier/prettier": "error"
}
}
Разделение ответственности здесь важно:
extends: ["prettier"] отключает конфликтующие
ESLint-правилаprettier/prettier включает проверку форматированияПравило анализирует файл и сравнивает его с результатом Prettier.
Пример несоответствия:
const sum=(a,b)=>{return a+b}
Prettier преобразует:
const sum = (a, b) => {
return a + b;
};
ESLint фиксирует:
Error: Replace `const·sum=(a,b)=>{return·a+b}` with `const sum = (a, b) => ...`
eslint-plugin-prettier позволяет унифицировать поведение редакторов, поскольку ESLint становится единой точкой проверки.
Используется комбинация:
Настройка:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
В этом режиме Prettier выполняется через ESLint pipeline.
Плагин поддерживает два основных сценария:
npx eslint src
Выводит ошибки форматирования как обычные ESLint-нарушения.
npx eslint src --fix
ESLint передает исправление Prettier, и код перезаписывается в отформатированном виде.
Без eslint-plugin-prettier обычно используется:
prettier --write .
eslint .
С плагином:
eslint . --fix
Разница заключается в том, что:
Эти два пакета выполняют разные функции и работают совместно.
prettier/prettierБез отключения правил ESLint могут возникать конфликты:
indentquotessemicomma-dangleНапример:
"rules": {
"semi": ["error", "always"]
}
Prettier может настроить другой стиль, и ESLint начнет противоречить самому себе.
eslint-plugin-prettier добавляет вычислительную нагрузку:
Особенности:
Для оптимизации используется:
eslint . --cache
Кеширование позволяет:
В монорепозиториях важно учитывать:
Типичная структура:
/packages
/app
/ui
.eslintrc.json
.prettierrc
eslint-plugin-prettier работает централизованно через общую конфигурацию.
В TypeScript-проектах плагин работает через ESLint-парсер:
{
"parser": "@typescript-eslint/parser",
"plugins": ["prettier"],
"extends": ["plugin:prettier/recommended"]
}
Prettier форматирует:
ESLint фиксирует отклонения независимо от синтаксиса TS.
В React-проектах Prettier внутри ESLint обрабатывает JSX:
const Button = ({onClick})=><button onCl ick={onClick}>Click</button>
После проверки:
const Button = ({ onClick }) => (
<button onCl ick={onClick}>Click</button>
);
ESLint фиксирует формат JSX как часть правила Prettier.
Использование Prettier как ESLint-правила имеет особенности:
Подход особенно эффективен в сценариях: