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경우 계속 읽으십시오. 나는 실제 문제가 내가 사용하고있는 노드 버전에 관한 대부분의 답변 parserOptions과 parser값을 시도했다 .

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

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

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