Ошибка анализа ESLint: неожиданный токен
С помощью этого кода:
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
}],
}
}
....
....
В чем проблема?
Ответы
Ответ 1
Непредвиденные ошибки токенов при синтаксическом анализе ESLint возникают из-за несовместимости среды разработки и текущих возможностей синтаксического анализа ESLint с текущими изменениями в JavaScripts ES6 ~ 7.
Добавление свойства "parserOptions" к вашему.eslintrc больше не достаточно для определенных ситуаций, таких как использование
static contextTypes = { ... } /* react */
в классах ES6, поскольку ESLint в настоящее время не может разобрать его самостоятельно. Эта конкретная ситуация вызовет ошибку:
error Parsing error: Unexpected token =
Решение состоит в том, чтобы ESLint анализировал совместимый синтаксический анализатор. babel-eslint - это пакет, который недавно спас меня после прочтения этой страницы, и я решил добавить его в качестве альтернативного решения для всех, кто придет позже.
просто добавь:
"parser": "babel-eslint"
в файл .eslintrc
и запустите npm install babel-eslint --save-Dev
или yarn add -D babel-eslint
.
Обратите внимание, что, поскольку в новом Context API, начиная с React ^16.3
есть некоторые важные изменения, обратитесь к официальному руководству.
Ответ 2
ESLint 2.x экспериментально поддерживает синтаксис ObjectRestSpread, вы можете включить его, добавив следующее к вашему .eslintrc
: docs
"parserOptions": {
"ecmaVersion": 6,
"ecmaFeatures": {
"experimentalObjectRestSpread": true
}
},
ESLint 1.x не поддерживает оператор спреда, один из способов обойти это с помощью анализатора babel-eslint. Последние инструкции по установке и использованию находятся в файле readme проекта.
Ответ 3
"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"
}
}
}
Ссылка
Ответ 4
Сначала я решил эту проблему, установив babel-eslint с помощью npm.
npm install babel-eslint --save-dev
Во-вторых, добавьте эту конфигурацию в файл .eslintrc.
{
"parser":"babel-eslint"
}
Ответ 5
У меня возникла та же проблема, и я обнаружил, что какой-то код был написан вне функции render() по ошибке. Хмель это помогает.
Ответ 6
В моем случае (я использую Firebase Cloud Functions) я открыл .eslintrc.json
и изменил:
"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 2017
},
в:
"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 2018
},
Ответ 7
Если у вас есть задача предварительной фиксации с запущенным лайком eslint
, пожалуйста, продолжайте читать. Я перепробовал большинство ответов о значениях parserOptions
и parser
, где моя настоящая проблема касалась версии узла, которую я использовал.
Моя текущая версия узла была 12.0.0, но лайка каким-то образом использовала мою версию по умолчанию для nvm (хотя в моей системе не было nvm
). Похоже, это проблема с самим хаски. Итак:
- Я удалил папку
$HOME/.nvm
, которая не была удалена, когда я ранее удалил nvm
.
- Проверенный узел является последним и имеет правильные параметры парсера.
- Это начало работать!
Ответ 8
педо чуко апеста, уу да есть;) лол