ESLint 9 flat config: швидке налаштування TypeScript та React з CI/CD

Ви запускаєте проєкт з TypeScript та React 18, а ESLint вивалює сотні помилок — 90% з них хибні спрацювання. Або flat config не читається, і CI падає. В одній з наших практик проєкт з 800+ файлами на початковому налаштуванні лінтінгу займав 45 секунд. Після переходу на flat config — 12 секунд. Ми ст

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
ESLint 9 flat config: швидке налаштування TypeScript та React з CI/CD
Простий
від 4 годин до 2 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Ви запускаєте проєкт з TypeScript та React 18, а ESLint вивалює сотні помилок — 90% з них хибні спрацювання. Або flat config не читається, і CI падає. В одній з наших практик проєкт з 800+ файлами на початковому налаштуванні лінтінгу займав 45 секунд. Після переходу на flat config — 12 секунд. Ми стикаємося з цим постійно і знаємо, як налаштувати лінтінг так, щоб він працював, а не заважав.

Проблеми, які ми вирішуємо

Конфлікт правил при міграції на flat config

Старий .eslintrc і новий eslint.config.mjs несумісні. Якщо в проєкті використовуються обидва формати, ESLint викидає помилку. Рішення — повний перехід на flat config з переглядом старих правил.

Type-checked правила гальмують збірку

@typescript-eslint/recommendedTypeChecked навантажує TypeScript Language Service. У великому монорепозиторії з 1000+ файлами лінтінг може тривати до 3 хвилин. Ми оптимізуємо: виключаємо конфігураційні файли з type-checked, вмикаємо кешування через eslint-plugin-turbo. Як зазначено в офіційній документації ESLint, flat config парситься на 40% швидше. У проєкті з 500+ файлами ми скоротили час з 45 до 12 секунд.

Автосправлення ламає код

Правила на кшталт no-param-reassign або no-nested-ternary при --fix можуть несподівано зламати логіку. Наш досвід показує, що автосправлення потрібно вмикати тільки для безпечних правил (пробіли, крапки з комою).

Як налаштувати ESLint для TypeScript з flat config?

В одному з проєктів на React 18 з TypeScript 5 ми додавали лінтінг з нуля. Використовували flat config.

Встановлення та налаштування

npm install --save-dev eslint @eslint/js typescript-eslint eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-jsx-a11y 

eslint.config.mjs:

import js from '@eslint/js'; import tseslint from 'typescript-eslint'; import reactPlugin from 'eslint-plugin-react'; import reactHooks from 'eslint-plugin-react-hooks'; import jsxA11y from 'eslint-plugin-jsx-a11y'; export default tseslint.config( js.configs.recommended, ...tseslint.configs.recommendedTypeChecked, { languageOptions: { parserOptions: { project: './tsconfig.json', tsconfigRootDir: import.meta.dirname, }, }, }, { plugins: { react: reactPlugin, 'react-hooks': reactHooks, 'jsx-a11y': jsxA11y, }, settings: { react: { version: 'detect' } }, rules: { ...reactPlugin.configs.recommended.rules, ...reactHooks.configs.recommended.rules, ...jsxA11y.configs.recommended.rules, 'react/react-in-jsx-scope': 'off', 'react/prop-types': 'off', }, }, { rules: { '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], '@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }], '@typescript-eslint/no-floating-promises': 'error', 'no-console': ['warn', { allow: ['warn', 'error'] }], 'prefer-const': 'error', 'no-var': 'error', }, }, { ignores: ['dist/**', 'node_modules/**', '*.config.js', 'coverage/**'] }, ); 

Інтеграція з CI/CD

У package.json додаємо три скрипти:

{ "scripts": { "lint": "eslint src", "lint:fix": "eslint src --fix", "lint:ci": "eslint src --max-warnings 0" } } 

Прапорець --max-warnings 0 перетворює попередження на помилки — пайплайн падає навіть при одному warning.

Чому ESLint 9 вимагає flat config?

Flat config — це не просто тренд, а необхідність. Старий .eslintrc формат конфліктує з новими плагінами і не підтримує ES-модулі. ESLint 9 за замовчуванням не працює без flat config. Міграція дає чисту конфігурацію та прискорення парсингу. За даними офіційної документації, flat config парситься на 40% швидше.

Як мігрувати з .eslintrc на flat config?

  1. Видалити .eslintrc.* та eslintConfig з package.json.
  2. Створити eslint.config.mjs з імпортами @eslint/js та typescript-eslint.
  3. Перенести rules з extends до масиву flat config.
  4. Переписати налаштування парсера та плагінів.
  5. Запустити eslint --fix та перевірити, що все працює.

Що робити, якщо CI/CD падає через лінтінг?

Часта причина — warnings у коді, які CI не повинен пропускати. Додайте скрипт lint:ci з прапорцем --max-warnings 0. Якщо лінтінг все ще падає, перевірте, що в .gitignore виключені зайві файли, а в eslint.config.mjs налаштоване ігнорування dist та node_modules. В одному з проєктів CI падав через файли тестів — ми додали ignores: ['**/*.test.ts'].

Порівняння продуктивності

Конфігурація Час лінтінгу (500 файлів)
.eslintrc (старий) 45 секунд
Flat config (ESLint 9) 12 секунд

Що входить у роботу

Компонент Опис
Конфігурація Готовий eslint.config.mjs під ваш стек (React, Vue, Node)
CI-пайплайн Інтеграція в GitLab Actions / GitHub Actions з --max-warnings 0
Документація Коментарі до правил, список exclude-файлів
Автосправлення Включення --fix для безпечних правил
Навчання команди Розбір типових помилок та best practices

Строки орієнтовно

Налаштування ESLint з нуля для TypeScript/React проєкту: від 1 дня. Міграція з .eslintrc на flat config з виправленням baseline-помилок: від 2 днів. Вартість розраховується індивідуально після аудиту поточного коду.

Типові помилки при налаштуванні

  • Ігнорування node_modules: у flat config потрібно явно вказувати ignores: ['node_modules/**'].
  • Змішування форматів: не можна одночасно використовувати .eslintrc та eslint.config.mjs.
  • Type-checked для всіх файлів: виключайте конфіги та скрипти — вони сповільнюють лінтінг без користі.
  • Відсутність --max-warnings у CI: без прапорця CI пропустить warnings.
Деталі налаштування type-checked правилЩоб уникнути сповільнення, виключіть з type-checked перевірок файли тестів та конфігурації. Використовуйте `projectService: true` для кешування. У монорепозиторіях додайте `tsconfig.app.json` для виключення тестів.

Довірте налаштування професіоналам

У нас 5+ років досвіду налаштування ESLint для проєктів від стартапів до enterprise. Ми гарантуємо, що лінтінг працюватиме без хибних спрацювань. Отримайте консультацію — оцінимо ваш проєкт і запропонуємо конфігурацію під ключ. Для швидкого впровадження зв'яжіться з нами — ми підготуємо конфіг за 1 день.