eslint "ошибка синтаксического анализа: неожиданный токен {" в JSX

const title = 'My Minimal React Webpack Babel Setups';

const App = () => (<div><b>{title}</b><img src={img} /></div>)

В этом коде возникает ошибка "Ошибка синтаксического анализа ESLint: неожиданный токен {"

мой файл .eslintrc.js такой

module.exports = {
    "extends": "airbnb"
};

и я устанавливаю такие пакеты

"eslint": "^5.9.0",
"eslint-config-airbnb": "^17.1.0",
"eslint-loader": "^2.1.1",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-jsx-a11y": "^6.1.2",
"eslint-plugin-react": "^7.11.1",

Я думал, что ESLint может читать JSX, потому что в токене "<" не возникает ошибка. (Когда я изменяю раздел extends в файле.eslintrc.js на "airbnb-base", возникает ошибка "Ошибка синтаксического анализа ESLint: неожиданный токен <. Но теперь токен" <"не возникает ошибка)

Однако мой ESLint не может прочитать строку синтаксиса JSX {переменная}

4 ответа

Решение

Эслинт сам по себе не достаточно хорош. Первая установка babel-eslint:

npm install --save-dev babel-eslint

Затем добавьте в свой .eslintrc файл:

"parser": "babel-eslint"

Вы можете установить eslint-plugin-babel как хорошо, но я считаю, что это не нужно

У меня та же ошибка на Next.js.

Эти шаги решили мою проблему:

1) Установить бабел-эслинт:

npm install --save-dev babel-eslint

2) Добавить babel-eslint в качестве парсера в конфигурацию eslint

"parser": "babel-eslint"

Мой конфиг eslint выглядит так (.eslintrc):

{
  "env": {
    "browser": true,
    "es6": true,
    "commonjs": true,
    "node": true
  },
  "extends": ["eslint:recommended", "plugin:react/recommended"],
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 9,
    "ecmaFeatures": {
      "jsx": true
    },
    "sourceType": "module"
  },
  "plugins": ["react"],
  "rules": {
    "react/react-in-jsx-scope": 0,
    "no-console": 1
  }
}

Для всех, кто зайдет на этот пост в марте 2020 года или позже, были некоторые обновления для babelи это приводит к тому, что принятый ответ устарел.

По сути, если вы пишете React и не используете фреймворк, такой как Next.js или create-react-app, и вам нужно настроить его для правильной работы вручную, вот краткое руководство, которому нужно следовать.

Предположения

Предполагается, что вы начинаете новый проект с марта 2020 г. и работаете с версией 8.8 или более поздней.

Что установить

Запустите следующее

      npm install @babel/eslint-parser @babel/preset-react

Если у вас нет eslint-plugin-reactустановлен, вы также захотите установить его, чтобы использовать рекомендуемые eslintнастройки для проектов React.

Важно : если у вас есть babel-eslintустановлен или присутствует в вашем package.jsonВсе еще, npm uninstallЭто.

Как настроить

Пример .eslintrc.jsфайл (или .eslintrcили же .eslintrc.json)

      module.exports = {
  env: {
    browser: true,
    es2021: true,
  },
  extends: ['eslint:recommended', 'plugin:react/recommended'],
  parser: '@babel/eslint-parser', // <<<< Important
  parserOptions: {
    requireConfigFile: false, // <<<< Allows you to skip Eslint complaining that you don't have a .babelrc file 
    babelOptions: {
      presets: ['@babel/preset-react'], // <<<< Important
    },
    ecmaFeatures: {
      jsx: true, // <<<< Important
    },
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  rules: {},
};

После этих обновлений мой проект начал работать как положено.

использованная литература

Мой.eslintr имеет эту дополнительную конфигурацию для включения JSX

"parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    }
  }
Другие вопросы по тегам