Ошибка синтаксического анализа ESLint: неожиданный токен

С этим кодом:

import React from 'react';
import { Link } from 'react-router';
import { View, NavBar } from 'amazeui-touch';

import * as Pages from '../components';

const {  Home, ...Components } = Pages;

Я получаю эту ошибку eslint:

7:16  error  Parsing error: Unexpected token .. Why?

Вот мой конфиг eslint:

{
  "extends": "airbnb",
  "rules": {
    /* JSX */
    "react/prop-types": [1, {
      "ignore": ["className", "children", "location", "params", "location*"]
    }],
    "no-param-reassign": [0, {
      "props": false
    }],
    "prefer-rest-params": 1,
    "arrow-body-style": 0,
    "prefer-template": 0,
    "react/prefer-stateless-function": 1,
    "react/jsx-no-bind": [0, {
      "ignoreRefs": false,
      "allowArrowFunctions": false,
      "allowBind": true
    }],
  }
}

........ В чем проблема?

18 ответов

Непредвиденные ошибки токенов при разборе ESLint возникают из-за несовместимости среды разработки и текущих возможностей синтаксического анализа ESLint с текущими изменениями в JavaScripts ES6~7.

Добавление свойства "parserOptions" к вашему.eslintrc больше не достаточно для определенных ситуаций, таких как использование

static contextTypes = { ... } /* react */

в классах ES6, поскольку ESLint в настоящее время не может разобрать его самостоятельно. Эта конкретная ситуация вызовет ошибку:

error Parsing error: Unexpected token =

Решение состоит в том, чтобы ESLint анализировал совместимый синтаксический анализатор. babel-eslint - это пакет, который недавно спас меня после прочтения этой страницы, и я решил добавить его в качестве альтернативного решения для всех, кто придет позже.

просто добавь:

"parser": "babel-eslint"

на ваш .eslintrc файл и запустить npm install babel-eslint --save-dev или же yarn add -D babel-eslint,

Обратите внимание, что в качестве нового Context API, начиная с React ^16.3 есть некоторые важные изменения, пожалуйста, обратитесь к официальному руководству.

В моем случае (я использую облачные функции Firebase) я открыл .eslintrc.json и изменилось:

"parserOptions": {
  // Required for certain syntax usages
  "ecmaVersion": 2017
},

кому:

"parserOptions": {
  // Required for certain syntax usages
  "ecmaVersion": 2018
},

"parser": "babel-eslint" это нормально для меня!

читать больше: https://github.com/gildata/Roles/issues/6

{
    "parser": "babel-eslint",
    "parserOptions": {
        "ecmaVersion": 6,
        "sourceType": "module",
        "ecmaFeatures": {
            "jsx": true,
            "modules": true,
            "experimentalObjectRestSpread": true
        }
    },
    "plugins": [
        "react"
    ],
    "extends": ["eslint:recommended", "plugin:react/recommended"],
    "rules": {
        "comma-dangle": 0,
        "react/jsx-uses-vars": 1,
        "react/display-name": 1,
        "no-unused-vars": "warn",
        "no-console": 1,
        "no-unexpected-multiline": "warn"
    },
    "settings": {
        "react": {
            "pragma": "React",
            "version": "15.6.1"
        }
    }
}

ESLint 2.x экспериментально поддерживает синтаксис ObjectRestSpread, вы можете включить его, добавив следующее в ваш .eslintrc: docs

"parserOptions": {
  "ecmaVersion": 6,
  "ecmaFeatures": {
    "experimentalObjectRestSpread": true
  }
},

ESLint 1.x изначально не поддерживает оператор распространения, одним из способов обойти это является использование анализатора babel-eslint. Последние инструкции по установке и использованию находятся в файле readme проекта.

Сначала я решил эту проблему, установив babel-eslint с помощью npm.

npm install babel-eslint --save-dev

Во-вторых, добавьте эту конфигурацию в файл.eslintrc.

{
   "parser":"babel-eslint"
}

Первоначально решение заключалось в предоставлении следующей конфигурации, поскольку деструктуризация объекта была экспериментальной функцией и по умолчанию не поддерживалась:

{
  "parserOptions": {
    "ecmaFeatures": {
      "experimentalObjectRestSpread": true
    }
  }
}

Начиная с версии 5, эта опция устарела.

Теперь достаточно просто объявить версию ES, которая достаточно новая:

{
  "parserOptions": {
    "ecmaVersion": 2018
  }
}

I'm using eslint for cloud-functions (development env: flutter 2.2.3).

In my case .eslintrc.json does not exist so I had to update the file by including parserOptions: { "ecmaVersion": 2020, }, property at the end of file. My updated .eslintrc.js file looks like this:

      module.exports = {
  root: true,
  env: {
    es6: true,
    node: true,
  },
  extends: [
    "eslint:recommended",
    "google",
  ],
  rules: {
    quotes: ["error", "double"],
  },
  
  // Newly added property
  parserOptions: {
    "ecmaVersion": 2020,
  },
};

Я решил эту проблему, установив это в файле .eslintrc.json :

      "extends": [
    ...,
    "plugin:prettier/recommended"
]

Для записи, если вы используете eslint-plugin-vue, правильное место для добавления'parser': 'babel-eslint' это внутри parserOptions парам.

  'parserOptions': {
    'parser': 'babel-eslint',
    'ecmaVersion': 2018,
    'sourceType': 'module'
  }

https://eslint.vuejs.org/user-guide/

В феврале 2021 года вы можете использовать эти значения.

ecmaVersion - установите значение 3, 5 (по умолчанию), 6, 7, 8, 9, 10, 11 или 12, чтобы указать версию синтаксиса ECMAScript, которую вы хотите использовать. Вы также можете установить 2015 (то же, что и 6), 2016 (то же, что и 7), 2017 (то же, что и 8), 2018 (то же, что 9), 2019 (то же самое, что 10), 2020 (то же, что и 11) или 2021 ( то же, что и 12), чтобы использовать именование по годам.

https://eslint.org/docs/user-guide/configuring/language-options#specifying-parser-options

В моем случае добавление"parser": "@typescript-eslint/parser",строка в моем файле .eslintrc помогла:

        "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": ["tsconfig.json"],
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true,
      "modules": true,
      "experimentalObjectRestSpread": true
    }
  },

package.json в то же время имеет эти 2 строки:

          "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",

Для функций React + Firebase

Перейти к: функции -> .eslintrc.js

Добавьте это -parserOptions: {ecmaVersion: 8,},

      module.exports = {
  root: true,
  env: {
    es6: true,
    node: true,
  },
  parserOptions: {
    ecmaVersion: 8,
  },
  extends: ["eslint:recommended", "google"],
  rules: {
    quotes: ["error", "double"],
  },
};

Если у вас есть задача перед фиксацией с хаски бегом eslint, продолжайте читать. Я попробовал большинство ответов оparserOptions а также parser значения, в которых моя реальная проблема была связана с версией узла, которую я использовал.

Моя текущая версия узла была 12.0.0, но хаски каким-то образом использовал мою версию nvm по умолчанию (хотя у меня не было nvmв моей системе). Похоже, это проблема самого хаски. Так:

  1. Я удалил$HOME/.nvmпапка, которая не была удалена при удаленииnvm ранее.
  2. Подтвержденный узел является последним и имеет правильные параметры парсера.
  3. Началось работать!
      .
.
{
    "parserOptions": {
    "ecmaVersion": 2020
},
.
.

Будет делать свое дело.

Я использую машинописный текст и исправляю эту ошибку. parser

      ....
"prettier/prettier": [
            "error",
            {
                .....
                "parser": "typescript",
                .....
            }
        ],
....

Мне пришлось обновитьecmaVersionк"latest"

      "parserOptions": {
    "parser": "@babel/eslint-parser",
    "sourceType": "module",
    "ecmaVersion": "latest",
    "ecmaFeatures": {
      "jsx": true,
      "experimentalObjectRestSpread": true
    },
    "requireConfigFile": false
  },

Я столкнулся с проблемой, несмотря на реализацию всех вышеперечисленных решений. Когда я понизил версию eslint, она начала работать

Я только что изменил "скрипты": {"lint": "eslint". } в "scripts": {"lint": "eslint"} в файле package.json.

Другие вопросы по тегам