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

감사합니다 이미 업로드했습니다 ~
DongYao

3
객체 분산 속성 제안을 지원하는 파서를 사용해야합니다.
Felix Kling

예기치 않은 토큰 "가져 오기"를 포기 하시겠습니까? 그게 내 문제 였다.
Lonnie Best

답변:


253

ESLint 구문 분석에서 예기치 않은 토큰 오류는 JavaScript ES6 ~ 7에서 지속적으로 변경되는 개발 환경과 ESLint의 현재 구문 분석 기능 간의 비 호환성으로 인해 발생합니다.

.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.

는 AS 있습니다 새로운 상황에 맞는 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를 "꺼내"고 IDE에 eslint-ing을 추가하는 경우 babel-eslint가 이미 적용되었습니다. 파서와 좋은 것을 추가하십시오.
웨스 더프

1
나도 도움이 문서를 발견 : grantnorwood.com/...
gurun8

"parser": "babel-eslint"eslintrc 파일에를 추가 했지만 대신 여러 오류가 발생했습니다. 반응하는 중이며 가져온 구성 요소가 호출되었지만 사용되지 않았다는 메시지가 표시됩니다. 어느 것이 이상하다.
David Essien

61

ESLint 2.x에서 실험적으로 당신이 당신에 다음을 추가하여 사용할 수 있습니다, ObjectRestSpread 구문을 지원 .eslintrc: 문서를

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

ESLint 1.x는 기본적으로 스프레드 연산자를 지원하지 않습니다.이 문제를 해결하는 한 가지 방법은 babel-eslint 파서를 사용하는 것 입니다. 최신 설치 및 사용 지침은 프로젝트 추가 정보에 있습니다.


2
그건 사실이 아니야. ESLint의 기본 파서 Espree는 스프레드 및 심지어 오브젝트 레스트 스프레드 (espree가 지원하는 유일한 실험 기능)를 지원합니다. 자세한 내용은 다음을 참조하십시오 : eslint.org/docs/user-guide/…
Ilya Volodin

1
ecmaFeatures더 이상 사용되지 않습니다. 사용ecmaVersion
Richard Ayotte

7
ecmaVersion: 2018ESLint 5
Tomasz

1
내가 그렇게 말할 수 있다면 가장 좋은 해결책.
Ansjovis8686

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

전체 예제 ++를 사용하는 것이 좋습니다. TamperMonkey JS 힌트 오류를 ​​해결하는 데 도움이되었습니다.
brasofilo

@brasofilo 탬퍼 원숭이에서 eslint를 어디에서 바꾸나요?
Metin Dagcilar

22

먼저 npm을 사용하여 babel-eslint를 설치 하여이 문제를 해결했습니다.

npm install babel-eslint --save-dev

둘째,이 구성을 .eslintrc 파일에 추가하십시오.

{
   "parser":"babel-eslint"
}

고마워, 이것은 내 보푸라기 문제를 해결했다
Deejers

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 running으로 사전 커밋 작업을 수행 한 eslint경우 계속 읽으십시오. 나는 실제 문제가 내가 사용하고있는 노드 버전에 관한 대부분의 답변 parserOptionsparser값을 시도했다 .

내 현재 노드 버전은 12.0.0이지만 허스키는 nvm내 시스템에 없는 경우에도 어떻게 든 내 VM 기본 버전을 사용하고있었습니다 . 이것은 거친 자체 의 문제 인 것 같습니다 . 그래서:

  1. 나는 삭제 된 $HOME/.nvm폴더 나 제거 할 때 삭제되지 않은 nvm이전을.
  2. 확인 된 노드는 최신이며 적절한 파서 옵션을 수행했습니다.
  3. 작동하기 시작했습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.