Ошибка анализа 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
    }],
  }
}

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

Ответ 1

Непредвиденные ошибки токенов при синтаксическом анализе 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 есть некоторые важные изменения, обратитесь к официальному руководству.

Ответ 2

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

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

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

Ответ 3

"parser": "babel-eslint" помог мне решить проблему

{
    "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"
        }
    }
}

Ссылка

Ответ 4

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

npm install babel-eslint --save-dev

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

{
   "parser":"babel-eslint"
}

Ответ 5

У меня возникла та же проблема, и я обнаружил, что какой-то код был написан вне функции render() по ошибке. Хмель это помогает.

Ответ 6

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

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

в:

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

Ответ 7

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

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

  1. Я удалил папку $HOME/.nvm, которая не была удалена, когда я ранее удалил nvm.
  2. Проверенный узел является последним и имеет правильные параметры парсера.
  3. Это начало работать!

Ответ 8

педо чуко апеста, уу да есть;) лол