На главную

Контейнеры и CI/CD

Конфигуратор ESLint

Собирает eslint.config.js в плоском формате девятой версии под ваш стек и объясняет, от какой именно ошибки бережёт каждое правило.

Стек

Через запятую

Наборы правил

eslint.config.js

import js from '@eslint/js';
import globals from 'globals';

export default [
  { ignores: ['dist/**', 'node_modules/**', 'coverage/**'] },
  js.configs.recommended,
  {
    files: ['**/*.{js,mjs,cjs}'],
    languageOptions: {
      ecmaVersion: 2023,
      sourceType: 'module',
      globals: { ...globals.browser },
    },
    rules: {
      'no-undef': 'error',
      'no-unused-vars': ['error', { args: 'after-used', argsIgnorePattern: '^_' }],
      'no-cond-assign': ['error', 'except-parens'],
      'no-constant-binary-expression': 'error',
      'no-self-compare': 'error',
      'no-unreachable-loop': 'error',
      'eqeqeq': ['error', 'smart'],
      'no-var': 'error',
      'prefer-const': 'error',
      'radix': 'error',
      'no-console': ['warn', { allow: ['warn', 'error'] }],
      'no-debugger': 'error',
      'no-alert': 'warn',
    },
  },
];

Установка

npm install -D eslint @eslint/js globals

Что делает каждое правило

ПравилоЗачем
no-undefОбращение к необъявленной переменной — почти всегда опечатка в имени.
no-unused-varsНеиспользуемая переменная — след недоделанной правки.
no-cond-assignЛовит «=» там, где имелось в виду «===».
no-constant-binary-expressionВыражение, результат которого известен заранее: сравнение массива с числом, «??» после «||».
no-self-comparex === x проверяет не то, что задумано (для NaN есть Number.isNaN).
no-unreachable-loopТело цикла с безусловным return или break выполняется один раз.
eqeqeq«==» приводит типы: "" == 0 истинно, null == undefined тоже.
no-varvar всплывает на всю функцию и переопределяется молча.
prefer-constПеременная, которой не присваивают заново, честнее объявляется const.
radixparseInt без основания на строке с ведущим нулём даёт неожиданный результат.
no-consoleconsole.log забывают в коде и он уезжает на прод.
no-debuggerdebugger останавливает браузер у пользователя.
no-alertalert блокирует поток и не переводится.

Плоский конфиг вместо .eslintrc

С девятой версии ESLint читает eslint.config.js — обычный JS-модуль, экспортирующий массив. Плагины подключаются импортом, а не строкой имени, поэтому опечатка в названии превращается в честную ошибку модуля. Порядок элементов важен: последний выигрывает, и свои правила всегда ставят после готовых наборов.