Помилка ESLint Parsing: Несподіваний маркер


169

З цим кодом:

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
    }],
  }
}

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


чи можете ви опублікувати конфігурацію eslint?
азій

дякую, я вже завантажив ~
DongYao

3
Потрібно використовувати аналізатор, який підтримує пропозицію властивості об'єкта поширювати.
Фелікс Клінг

Зтратив несподіваний "імпорт" токена? Це було моє питання .
Lonnie Best

Відповіді:


253

Несподівані помилки маркера при синтаксичному розборі 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.

Зауважте, що новий API контексту, який починається з React ^16.3деяких важливих змін, перегляньте офіційне керівництво .


4
yarn add -D babel-eslintдля тих, хто використовує пряжу.
Нейромедіатор

8
Для тих, хто не знає, куди додати "parser": "babel-eslint"конфігураційний оператор, він знаходиться в .eslintrc.json. У моєму випадку це файл JSON, але в основному ваш файл .eslintrc
Avid Programmer

2
Примітка * Якщо ви "викинули" додаток create-react і додаєте eslint-ing до свого IDE, babel-eslint вже застосовується. Просто додайте парсер і ваше добро.
Уес Дафф

1
Цю статтю я також вважаю
gurun8

Я додав "parser": "babel-eslint"файл у свій файл eslintrc, але натомість отримав кілька помилок. Я працюю з react, і це говорить мені, що Мої імпортні компоненти називались, але ніколи не використовувалися. Який гарний.
Девід Ессьєн

61

ESLint 2.x експериментально підтримує синтаксис ObjectRestSpread, ви можете ввімкнути його, додавши до своїх елементів .eslintrc: docs

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

ESLint 1.x не підтримує оператора розповсюдження, один із способів обійти це - за допомогою аналізатора babel-eslint . Останні інструкції з встановлення та використання містяться в проектній програмі.


2
Це не правда. Аналізатор ESLint за замовчуванням Espree підтримує розширення і навіть розповсюдження спокою об’єкта (це єдина експериментальна функція, яка підтримує espree). Для отримання додаткової інформації дивіться це: eslint.org/docs/user-guide/…
Ілля Володін

1
ecmaFeaturesзастаріло. ВикористанняecmaVersion
Річард Айотт

7
ecmaVersion: 2018працює без попередження з ESLint 5
Tomasz Racia

1
Найкраще рішення, якщо я можу так сказати.
Ansjovis86

1
Я не бачу проблем з цим рішенням - він справно працював для мене. Це також краще, ніж установити новий пакет!
Паровий геймер

49

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

Довідково


3
Ця відповідь нічого не додає до відповіді @ JaysQubeXon.
cs01

7
Насправді це так - ви отримуєте приклад конфігурації (з включеними parserOptions)
kriskodzi

Чудово мати повний приклад ++. Це допомогло мені виправити помилки натяків на TamperMonkey JS.
brasofilo

@brasofilo де ти міняєш еслінт у мавпочки?
Metin Dagcilar

22

Я вирішив цю проблему спочатку, встановивши babel-eslint за допомогою npm

npm install babel-eslint --save-dev

По-друге, додайте цю конфігурацію у файл .eslintrc

{
   "parser":"babel-eslint"
}

Дякую, це
вирішило

21

У моєму випадку (я використовую хмарні функції Firebase) я відкрив .eslintrc.jsonта змінив:

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

до:

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

8

Спочатку рішення полягало в наданні наступного конфігурації як деструктуризації об'єкта, що використовувався в якості експериментальної функції і не підтримується за замовчуванням:

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

Починаючи з версії 5, ця опція застаріла .

Тепер достатньо лише оголосити версію ES, яка є достатньо новою:

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

1

Якщо у вас є попереднє завдання із запуском хаскі eslint, будь ласка, продовжуйте читати. Я спробував більшість відповідей про parserOptionsтаparser значення, де моя справжня проблема стосувалася версії вузла, яку я використовував.

Моя поточна версія вузла становила 12.0.0, але хаскі якось використовував мою версію за замовчуванням nvm (хоча я не мав nvmу своїй системі). Здається, це проблема з самим хаскі . Так:

  1. Я видалив $HOME/.nvmпапку, яку не було видалено, коли я її видалив nvmраніше.
  2. Перевірений вузол - це останній і правильний параметр параметри.
  3. Це почало працювати!

1

Тільки для запису, якщо ви використовуєте eslint-plugin-vue , правильне місце для додавання 'parser': 'babel-eslint'- це parserOptionsпарам.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.