ESLint-Analysefehler: Unerwartetes Token


168

Mit diesem Code:

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

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

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

Ich bekomme diesen Eslint-Fehler:

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

Hier ist meine eslint Konfiguration:

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

.... .... Was ist das Problem?


kannst du deine eslint config posten?
Azium

Dank habe ich laden schon ~
Dongyao

3
Sie müssen einen Parser verwenden, der den Objektverteilungs-Eigenschaftsvorschlag unterstützt.
Felix Kling

Verschwenden Sie das unerwartete Token "importieren"? Das war mein Problem .
Lonnie Best

Antworten:


252

Unerwartete Tokenfehler beim ESLint-Parsing treten aufgrund der Inkompatibilität zwischen Ihrer Entwicklungsumgebung und den aktuellen Parsing-Funktionen von ESLint mit den laufenden Änderungen mit JavaScripts ES6 ~ 7 auf.

Das Hinzufügen der Eigenschaft "parserOptions" zu Ihrer .eslintrc reicht für bestimmte Situationen, z. B. die Verwendung, nicht mehr aus

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

In ES6-Klassen kann ESLint es derzeit nicht selbst analysieren. Diese besondere Situation führt zu einem Fehler von:

error Parsing error: Unexpected token =

Die Lösung besteht darin, ESLint von einem kompatiblen Parser analysieren zu lassen. babel-eslint ist ein Paket, das mich kürzlich nach dem Lesen dieser Seite gerettet hat, und ich habe beschlossen, dies als alternative Lösung für alle hinzuzufügen, die später kommen.

einfach hinzufügen:

"parser": "babel-eslint"

zu Ihrer .eslintrcDatei und führen Sie npm install babel-eslint --save-devoder yarn add -D babel-eslint.

Bitte beachten Sie, dass die neue Kontext-API ab React ^16.3einige wichtige Änderungen enthält. Weitere Informationen finden Sie im offiziellen Handbuch .


4
yarn add -D babel-eslintfür diejenigen, die Garn verwenden.
Neurotransmitter

7
Für diejenigen, die nicht wissen, wo sie die "parser": "babel-eslint"config-Anweisung hinzufügen sollen , finden Sie sie in der .eslintrc.json. In meinem Fall ist es eine JSON-Datei, aber im Grunde genommen Ihre .eslintrc-Datei
Avid Programmer

2
Hinweis * Wenn Sie Ihre Create-React-App "ausgeworfen" haben und Ihrer IDE Eslinting hinzufügen, wird Babel-Eslint bereits angewendet. Fügen Sie einfach den Parser hinzu und los geht's.
Wes Duff

1
Ich fand diesen Artikel auch hilfreich: grantnorwood.com/…
gurun8

Ich habe das "parser": "babel-eslint"zu meiner eslintrc-Datei hinzugefügt , aber stattdessen mehrere Fehler erhalten. Ich arbeite mit reagieren und es sagt mir, dass meine importierten Komponenten aufgerufen, aber nie verwendet wurden. Welches ist seltsam.
David Essien

61

ESLint 2.x unterstützt experimentell die ObjectRestSpread-Syntax. Sie können sie aktivieren, indem Sie Folgendes zu Ihren Dokumenten hinzufügen .eslintrc: docs

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

ESLint 1.x unterstützt den Spread-Operator nicht nativ. Eine Möglichkeit, dies zu umgehen, ist die Verwendung des Babel-Eslint-Parsers . Die neuesten Installations- und Verwendungsanweisungen finden Sie in der Projekt-Readme-Datei.


2
Das ist nicht wahr. Der Standard-Parser Espree von ESLint unterstützt die Verbreitung und sogar die Verbreitung von Objektresten (dies ist die einzige experimentelle Funktion, die espree unterstützt). Weitere Informationen finden Sie hier: eslint.org/docs/user-guide/…
Ilya Volodin

1
ecmaFeatureswurde veraltet. Verwenden SieecmaVersion
Richard Ayotte

7
ecmaVersion: 2018funktioniert ohne Vorwarnung mit ESLint 5
Tomasz Racia

1
Beste Lösung, wenn ich so sagen darf.
Ansjovis86

1
Ich sehe kein Problem mit dieser Lösung - es hat gut für mich funktioniert. Es ist besser, als auch ein neues Paket installieren zu müssen!
Steamgamer

48

"parser": "babel-eslint" hat mir geholfen, das Problem zu beheben

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

Referenz


3
Diese Antwort fügt der Antwort von @ JaysQubeXon ​​nichts hinzu.
CS01

7
Eigentlich tut es das - Sie erhalten eine Beispielkonfiguration (mit parserOptions eingeschlossen)
kriskodzi

Schön, das vollständige Beispiel ++ zu haben. Es hat mir geholfen, einen TamperMonkey JS-Hinweisfehler zu beheben.
brasofilo

@brasofilo wo änderst du eslint in manipulationsaffen?
Metin Dagcilar

22

Ich habe dieses Problem gelöst, indem ich zuerst babel-eslint mit npm installiert habe

npm install babel-eslint --save-dev

Zweitens fügen Sie diese Konfiguration in die .eslintrc-Datei ein

{
   "parser":"babel-eslint"
}

Danke, das hat meine
Flusenprobleme

21

In meinem Fall (ich verwende Firebase Cloud-Funktionen) habe ich geöffnet .eslintrc.jsonund geändert:

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

zu:

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

8

Ursprünglich bestand die Lösung darin, die folgende Konfiguration bereitzustellen, da die Objektzerstörung eine experimentelle Funktion war und standardmäßig nicht unterstützt wurde:

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

Seit Version 5 ist diese Option veraltet .

Jetzt reicht es aus, nur eine Version von ES zu deklarieren, die neu genug ist:

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

1

Wenn Sie eine Pre-Commit-Aufgabe mit Husky haben eslint, lesen Sie bitte weiter. Ich habe die meisten Antworten parserOptionsund parserWerte ausprobiert , bei denen mein eigentliches Problem die von mir verwendete Knotenversion war.

Meine aktuelle Knotenversion war 12.0.0, aber Husky verwendete irgendwie meine NVM-Standardversion (obwohl ich sie nicht nvmin meinem System hatte). Dies scheint ein Problem mit Husky selbst zu sein. So:

  1. Ich gelöschte $HOME/.nvmOrdner , die nicht gelöscht wurde , als ich entfernt nvmfrüher.
  2. Der verifizierte Knoten ist der neueste und hat die richtigen Parser-Optionen ausgeführt.
  3. Es fing an zu arbeiten!

1

Nur zur Veranschaulichung : Wenn Sie eslint-plugin-vue verwenden , befindet sich der richtige Ort zum Hinzufügen 'parser': 'babel-eslint'innerhalb von parserOptionsparam.

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.