ESLint Ayrıştırma hatası: Beklenmeyen simge


169

Bu kodla:

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

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

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

Bu eslint hatasını alıyorum:

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

İşte benim eslint yapılandırma:

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

.... .... Sorun ne?


eslint config'inizi gönderebilir misiniz?
— azium

teşekkürler ben zaten
— yükledim

3
Nesne yayma özelliği teklifini destekleyen bir ayrıştırıcı kullanmanız gerekir.
— Felix Kling

Beklenmeyen Jeton "içe aktarma" nı yaptınız mı? Benim sorunum buydu .
— Lonnie Best

Yanıtlar:


253

ESLint ayrıştırma işleminde beklenmeyen simge hataları, geliştirme ortamınızla ESLint'in geçerli ayrıştırma özellikleri arasındaki JavaScripts ES6 ~ 7 ile devam eden değişikliklerle uyumsuzluk nedeniyle oluşur.

.Eslintrc dosyanıza "parserOptions" özelliğini eklemek artık kullanmak gibi belirli durumlar için yeterli değildir

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

ESLint sınıflarında ESLint şu anda kendi başına ayrıştıramıyor. Bu özel durum şu hatayı verir:

error Parsing error: Unexpected token =

Çözüm, ESLint'in uyumlu bir ayrıştırıcı tarafından ayrıştırılmasıdır. babel-eslint bu sayfayı okuduktan sonra beni kurtaran bir paket ve bunu daha sonra gelen herkes için alternatif bir çözüm olarak eklemeye karar verdim.

sadece ekle:

"parser": "babel-eslint"

senin için .eslintrc dosya ve çalıştırmak npm install babel-eslint --save-devveya yarn add -D babel-eslint.

Lütfen dikkat ediniz yeni Bağlam API başlayarak React ^16.3bazı önemli değişiklikler var, bakınız resmi rehber .


4
yarn add -D babel-eslintİplik kullananlar için.
— Nörotransmitter

8
"parser": "babel-eslint"Config deyimini nereye ekleyeceğini bilmeyenler için .eslintrc.json. Benim durumumda, bu bir JSON dosyası, ama temelde, .eslintrc dosyanız
— Avid Programmer

2
Not * Oluşturma reaksiyonu uygulamanızı "çıkarttıysanız" ve IDE'nize eklenti ekliyorsanız, babel eklentisi zaten uygulanmıştır. Ayrıştırıcıyı ve gitmek için iyi olanı ekleyin.
— Wes Duff

1
Bu makaleyi de yararlı buldum: grantnorwood.com/…
— gurun8

Eklediğim "parser": "babel-eslint"benim eslintrc dosyasına ancak bunun yerine birden fazla hata var. Tepki ile çalışıyorum ve bana ithal edilen bileşenlerimin çağrıldığını ancak hiç kullanılmadığını söylüyor. Hangi garip.
— David Essien

61

ESLint 2.x, ObjectRestSpread sözdizimini deneysel olarak destekler, aşağıdakilere ekleyerek etkinleştirebilirsiniz .eslintrc: docs

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

ESLint 1.x, spread operatörünü yerel olarak desteklemez, bunun üstesinden gelmenin bir yolu babel-eslint ayrıştırıcısını kullanmaktır . En son kurulum ve kullanım talimatları proje benioku dosyasındadır.


2
Bu doğru değil. ESLint'in varsayılan ayrıştırıcısı Espree formayı ve hatta nesne dinlenme aralığını destekler (espree'nin desteklediği tek deneysel özelliktir). Daha fazla bilgi için şuraya
— Ilya Volodin

1
ecmaFeatures, kullanımdan kaldırıldı. KullanımecmaVersion
— Richard Ayotte

7
ecmaVersion: 2018ESLint 5 ile uyarı vermeden çalışıyor
— Tomasz Racia

1
Bunu söyleyebilirsem en iyi çözüm.
— Ansjovis86

1
Bu çözümle ilgili bir sorun görmüyorum - benim için iyi çalıştı. Yeni bir paket kurmaktan daha iyi!
— Steam oyuncusu

49

"parser": "babel-eslint" sorunu düzeltmeme yardımcı oldu

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

Referans


3
Bu cevap @ JaysQubeXon'un cevabına hiçbir şey eklemiyor.
— cs01

7
Aslında öyle - örnek bir yapılandırma alırsınız (parserOptions dahil)
— kriskodzi

Tam örnek ++ için harika. Bir TamperMonkey JS ipucu hatasını düzeltmeme yardımcı oldu.
— brasofilo

@brasofilo Kurcalama maymunundaki eslintini nereden değiştirirsiniz?
— Metin Dağcılar

22

Bu sorunu İlk olarak, babil-eslint'i npm kullanarak yükleyerek çözdüm

npm install babel-eslint --save-dev

İkinci olarak, bu yapılandırmayı .eslintrc dosyasına ekleyin

{
   "parser":"babel-eslint"
}

Teşekkürler, bu benim linting sorunlarımı düzeltti
— Deejers

21

Benim durumumda (im Firebase Bulut İşlevleri kullanarak) açtım .eslintrc.jsonve değiştirdim:

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

için:

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

8

Başlangıçta çözüm, deneysel bir özellik olarak kullanılan ve varsayılan olarak desteklenmeyen nesne yok etme olarak aşağıdaki yapılandırmayı sağlamaktı:

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

Sürüm 5'ten beri, bu seçenek kullanımdan kaldırılmıştır .

Şimdi ES'nin yeterince yeni bir sürümünü beyan etmek yeterlidir:

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

1

Husky koşusu ile ilgili bir ön taahhüt göreviniz varsa eslint, lütfen okumaya devam edin. İle ilgili cevapların çoğunu denedim parserOptionsveparserGerçek sorunumun kullandığım düğüm sürümü ile ilgili olduğu değerlerin .

Geçerli düğüm sürümüm 12.0.0'dı, ancak husky nvm varsayılan sürümümü bir şekilde kullanıyordu ( nvmsistemimde olmasa bile ). Bu husky ile ilgili bir sorun gibi görünüyor . Yani:

  1. Daha önce kaldırdığımda silinmeyen $HOME/.nvmklasörü sildim nvm.
  2. Doğrulanmış düğüm en sonuncudur ve uygun ayrıştırıcı seçeneklerini gerçekleştirmiştir.
  3. Çalışmaya başladı!

1

Sadece kayıt için, eslint-plugin-vue kullanıyorsanız , eklemek için doğru yer param 'parser': 'babel-eslint'içinde parserOptions.

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.