Ошибка ESLint "Ошибка сборки модуля" с помощью eslint-config-airbnb

Я пытаюсь создать проект React, который использует webpack и ESLint с конфигурацией airbnb для ESLint. Когда я пытаюсь запустить проект с помощью сервера webpack dev, я получаю следующую ошибку:

"Ошибка сборки модуля: Ошибка: /react -template/ node_modules/eslint-config-airbnb/rules/react-a11y.js:   Конфигурация ESLint недействительна:   - Неожиданное свойство верхнего уровня" ecmaFeatures".

Это использование eslint-config-airbnb v. 15.0.1. Я проверил файл react-a11y.js и подтвердил, что существует свойство верхнего уровня "ecmaFeatures". Я знаю, как ESLint 2.0.0 ecmaFeatures теперь должны находиться под свойством parserOptions, но я не уверен, что это применимо только к файлу .eslintrc. Я хотел бы использовать конфигурацию airbnb, если это возможно, поэтому я ценю любую помощь. Вот мой файл .eslintrc для справки.

.eslintrc

{
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 2016,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "env": {
    "es6": true,
    "browser": true,
    "node": true,
    "jest": true
  },
  "extends": ["airbnb"]
}

Ответ 1

Я понял решение.

Вам нужно отредактировать react-a11y.js и react.js, расположенный в ./node_modules/.bin/eslint-config-airbnb/rules/.

В react-a11y.js удалить:

ecmaFeatures: {
  jsx: true
},

и замените его на:

parserOptions: {
  ecmaFeatures: {
    jsx: true,
  },
},

В react.js просто удалите:

ecmaFeatures: {
  jsx: true
},

и вам должно быть хорошо идти.

Кроме того, я смотрю на репортаж airbnb прямо сейчас, и похоже, что они исправили его почти месяц назад, но я просто переустановил eslint-config-airbnb сегодня, поэтому я не уверен, что там произошло.

Вот ссылки на реакция-a11y.js diff и response.js diff. Они показывают, что вам нужно добавить/удалить.

Ответ 2

Глобальная eslint была обновлена ​​с 3.19.0-1 до 4.0.0-1, когда проблема появилась для меня.

eslint v4 пока не поддерживается в eslint-config-airbnb и eslint-config-airbnb-base

https://github.com/eslint/eslint/issues/8726#issuecomment-308367541

Ответ 3

Вы не используете JSON. Он пропускает котировки вокруг первого "парсера";

{
  "parser": "babel-eslint",
  "parserOptions": {
  "ecmaVersion": 2016,
  "sourceType": "module",
   "ecmaFeatures": {
  "jsx": true
 }
},
  "env": {
  "es6": true,
  "browser": true,
  "node": true,
  "jest": true
 },
 "extends": ["airbnb"]
}