Ошибка синтаксического анализа 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
}],
}
}
........ В чем проблема?
18 ответов
Непредвиденные ошибки токенов при разборе 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
есть некоторые важные изменения, пожалуйста, обратитесь к официальному руководству.
В моем случае (я использую облачные функции Firebase) я открыл .eslintrc.json
и изменилось:
"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 2017
},
кому:
"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 2018
},
"parser": "babel-eslint"
это нормально для меня!
читать больше: https://github.com/gildata/Roles/issues/6
{
"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"
}
}
}
ESLint 2.x экспериментально поддерживает синтаксис ObjectRestSpread, вы можете включить его, добавив следующее в ваш .eslintrc
: docs
"parserOptions": {
"ecmaVersion": 6,
"ecmaFeatures": {
"experimentalObjectRestSpread": true
}
},
ESLint 1.x изначально не поддерживает оператор распространения, одним из способов обойти это является использование анализатора babel-eslint. Последние инструкции по установке и использованию находятся в файле readme проекта.
Сначала я решил эту проблему, установив babel-eslint с помощью npm.
npm install babel-eslint --save-dev
Во-вторых, добавьте эту конфигурацию в файл.eslintrc.
{
"parser":"babel-eslint"
}
Первоначально решение заключалось в предоставлении следующей конфигурации, поскольку деструктуризация объекта была экспериментальной функцией и по умолчанию не поддерживалась:
{
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true
}
}
}
Начиная с версии 5, эта опция устарела.
Теперь достаточно просто объявить версию ES, которая достаточно новая:
{
"parserOptions": {
"ecmaVersion": 2018
}
}
I'm using
eslint
for cloud-functions (development env: flutter 2.2.3).
In my case
.eslintrc.json
does not exist so I had to update the file by including
parserOptions: { "ecmaVersion": 2020, },
property at the end of file. My updated
.eslintrc.js
file looks like this:
module.exports = {
root: true,
env: {
es6: true,
node: true,
},
extends: [
"eslint:recommended",
"google",
],
rules: {
quotes: ["error", "double"],
},
// Newly added property
parserOptions: {
"ecmaVersion": 2020,
},
};
Я решил эту проблему, установив это в файле .eslintrc.json :
"extends": [
...,
"plugin:prettier/recommended"
]
Для записи, если вы используете eslint-plugin-vue, правильное место для добавления'parser': 'babel-eslint'
это внутри parserOptions
парам.
'parserOptions': {
'parser': 'babel-eslint',
'ecmaVersion': 2018,
'sourceType': 'module'
}
В феврале 2021 года вы можете использовать эти значения.
ecmaVersion - установите значение 3, 5 (по умолчанию), 6, 7, 8, 9, 10, 11 или 12, чтобы указать версию синтаксиса ECMAScript, которую вы хотите использовать. Вы также можете установить 2015 (то же, что и 6), 2016 (то же, что и 7), 2017 (то же, что и 8), 2018 (то же, что 9), 2019 (то же самое, что 10), 2020 (то же, что и 11) или 2021 ( то же, что и 12), чтобы использовать именование по годам.
https://eslint.org/docs/user-guide/configuring/language-options#specifying-parser-options
В моем случае добавление"parser": "@typescript-eslint/parser",
строка в моем файле .eslintrc помогла:
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": ["tsconfig.json"],
"sourceType": "module",
"ecmaFeatures": {
"jsx": true,
"modules": true,
"experimentalObjectRestSpread": true
}
},
package.json в то же время имеет эти 2 строки:
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
Для функций React + Firebase
Перейти к: функции -> .eslintrc.js
Добавьте это -parserOptions: {ecmaVersion: 8,},
module.exports = {
root: true,
env: {
es6: true,
node: true,
},
parserOptions: {
ecmaVersion: 8,
},
extends: ["eslint:recommended", "google"],
rules: {
quotes: ["error", "double"],
},
};
Если у вас есть задача перед фиксацией с хаски бегом eslint
, продолжайте читать. Я попробовал большинство ответов оparserOptions
а также parser
значения, в которых моя реальная проблема была связана с версией узла, которую я использовал.
Моя текущая версия узла была 12.0.0, но хаски каким-то образом использовал мою версию nvm по умолчанию (хотя у меня не было nvm
в моей системе). Похоже, это проблема самого хаски. Так:
- Я удалил
$HOME/.nvm
папка, которая не была удалена при удаленииnvm
ранее. - Подтвержденный узел является последним и имеет правильные параметры парсера.
- Началось работать!
.
.
{
"parserOptions": {
"ecmaVersion": 2020
},
.
.
Будет делать свое дело.
Я использую машинописный текст и исправляю эту ошибку.
parser
....
"prettier/prettier": [
"error",
{
.....
"parser": "typescript",
.....
}
],
....
Мне пришлось обновитьecmaVersion
к"latest"
"parserOptions": {
"parser": "@babel/eslint-parser",
"sourceType": "module",
"ecmaVersion": "latest",
"ecmaFeatures": {
"jsx": true,
"experimentalObjectRestSpread": true
},
"requireConfigFile": false
},
Я столкнулся с проблемой, несмотря на реализацию всех вышеперечисленных решений. Когда я понизил версию eslint, она начала работать
Я только что изменил "скрипты": {"lint": "eslint". } в "scripts": {"lint": "eslint"} в файле package.json.