ESLint解析エラー:予期しないトークン


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設定を投稿できますか?
azium 2016年

すでにアップロードしてくれてありがとう
〜– DongYao

3
オブジェクトスプレッドプロパティの提案をサポートするパーサーを使用する必要があります。
Felix Kling 2016年

予期しないトークンの "インポート"は不要ですか?それが私の問題でした。
ロニーベスト

回答:


253

ESLintの解析で予期しないトークンエラーが発生するのは、開発環境とESLintの現在の解析機能がJavaScript ES6〜7で継続的に変更されているため、互換性がないためです。

.eslintrcに "parserOptions"プロパティを追加するだけでは、特定の状況では十分ではありません。

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

ESLintは現在、それ自体では解析できないため、ES6クラスでは。この特定の状況では、次のエラーがスローされます。

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"configステートメントを追加する場所がわからない場合は、にあり.eslintrc.jsonます。私の場合、これはJSONファイルですが、基本的には、.eslintrcファイル
Avid Programmer

2
注* create-react-appを「イジェクト」し、eslint-ingをIDEに追加する場合、babel-eslintはすでに適用されています。パーサーとあなたの良いものを追加するだけです。
ウェス・ダフ

1
私も、この記事が役に立ったと評価:grantnorwood.com/...
gurun8

"parser": "babel-eslint"eslintrcファイルにを追加しましたが、代わりに複数のエラーが発生しました。反応を使用していますが、インポートしたコンポーネントが呼び出されたが使用されなかったことがわかります。それは奇妙です。
David Essien

61

ESLint 2.xは実験的にObjectRestSpread構文をサポートします.eslintrc。次のものをに追加することで有効にできます:docs

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

ESLint 1.xは、spreadオペレーターをネイティブでサポートしていません。これを回避する1つの方法は、babel-eslintパーサーを使用することです。最新のインストールと使用方法の説明は、プロジェクトのreadmeにあります。


2
それは真実ではない。ESLintのデフォルトのパーサーであるEspreeは、スプレッド、さらにはオブジェクトレストスプレッドもサポートしています(これは、espreeがサポートする唯一の実験的な機能です)。詳細については、この参照eslint.org/docs/user-guide/...
イリヤVolodin

1
ecmaFeatures廃止されました。使用ecmaVersion
Richard Ayotte、

7
ecmaVersion: 2018ESLint 5で警告なしに機能
Tomasz

1
私がそう言うなら、最善の解決策。
Ansjovis86

1
このソリューションには問題がありません-私にとってはうまくいきました。新しいパッケージをインストールするよりもましです!
Steamゲーマー

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

完全なexample ++を持っているのは素晴らしいことです。TamperMonkey JSヒントエラーを修正するのに役立ちました。
ブラソフィロ

@brasofilo改ざんモンキーのエスリントはどこに変更しますか?
Metin Dagcilar

22

私は最初にnpmを使用してbabel-eslintをインストールすることでこの問題を解決しました

npm install babel-eslint --save-dev

次に、この構成を.eslintrcファイルに追加します

{
   "parser":"babel-eslint"
}

おかげで、これは私の
リンティングの

21

私の場合(私はFirebase Cloud Functionsを使用しています)私は開い.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

Huskyを実行した状態でプリコミットタスクを取得している場合は、eslint読み続けてください。私の実際の問題が私が使用していたノードのバージョンに関するものであるという答えparserOptionsparser値のほとんどを試しました。

私の現在のノードのバージョンは12.0.0でしたが、ハスキーはどういうわけかnvmのデフォルトバージョンを使用していました(nvmシステムにない場合でも)。これはハスキー自体の問題のようです。そう:

  1. 私は削除された$HOME/.nvmフォルダ、私は削除するとき削除されませんでしたnvmそれ以前に。
  2. 検証済みノードは最新であり、適切なパーサーオプションを実行しました。
  3. 動き始めました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.