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.