Javascript ESLint分析错误:意外的令牌

Javascript ESLint分析错误:意外的令牌,javascript,reactjs,eslint,Javascript,Reactjs,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: Unexpec

使用此代码:

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 2.x实验性地支持ObjectRestSpread语法,您可以通过将以下内容添加到
.eslintrc
中来启用它:


ESLint 1.x本机不支持spread操作符,解决此问题的一种方法是使用。最新的安装和使用说明在项目自述中。

由于您的开发环境和ESLint当前的解析功能与JavaScripts ES6~7的持续更改不兼容,ESLint解析中出现意外的令牌错误

将“parserOptions”属性添加到.eslintrc对于特定情况(例如使用

static contextTypes = { ... } /* react */
在ES6类中,因为ESLint目前无法单独解析它。此特定情况将引发以下错误:

error Parsing error: Unexpected token =
解决方案是由兼容的解析器解析ESLint。babel eslint是一个软件包,在阅读了本页之后,它最近救了我一命,我决定添加它作为以后任何人的替代解决方案

只需添加:

"parser": "babel-eslint"

到您的
.eslintrc
文件,然后运行
npm安装babel-eslint--保存dev
纱线添加-D babel-eslint

请注意,由于从
React^16.3
开始的新上下文API有一些重要更改,请参阅

“解析器”:“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"
        }
    }
}

我通过 首先,使用npm安装babel eslint

npm install babel-eslint --save-dev
其次,在.eslintrc文件中添加此配置

{
   "parser":"babel-eslint"
}
在我的例子中(我使用Firebase云函数),我打开了
.eslintrc.json
,并更改了:

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


如果您有一个husky正在运行
eslint
的预提交任务,请继续阅读。我尝试了关于
parserOptions
parser
值的大多数答案,其中我的实际问题是关于我正在使用的节点版本

我当前的节点版本是12.0.0,但husky以某种方式使用了我的nvm默认版本(尽管我的系统中没有
nvm
)。这似乎是一个问题本身。因此:

  • 删除了
    $HOME/.nvm
    文件夹
    ,该文件夹在我先前删除
    nvm
    时未被删除
  • 验证节点是最新的,并且没有正确的解析器选项
  • 它开始工作了
    请注意,如果您使用的是eslint插件vue,则添加
    “解析器”的正确位置:“babel eslint”
    位于
    parserOptions
    参数内

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

    最初,解决方案是提供以下配置,因为对象分解过去是一项实验性功能,默认情况下不支持:

    {
      "parserOptions": {
        "ecmaFeatures": {
          "experimentalObjectRestSpread": true
        }
      }
    }
    
    从第5版开始,这是一个新版本

    现在只需声明ES的一个版本就足够了,它足够新了:

    {
      "parserOptions": {
        "ecmaVersion": 2018
      }
    }
    
    在2021年2月,您可以使用这些值 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相同)以使用基于年份的命名

    我使用的是typescript,我解决了这个错误更改
    解析器

    。。。。
    “更漂亮/更漂亮”:[
    “错误”,
    {
    .....
    “解析器”:“类型脚本”,
    .....
    }
    ],
    ....
    

    尽管实施了上述所有解决方案,我还是面临着这个问题。当我降级eslint版本时,它开始工作了

    你能发布你的eslint配置吗?谢谢,我已经上传了~你需要使用一个支持对象扩展属性建议的解析器。意外的标记“导入”不是吗?那是我的,那不是真的。ESLint的默认解析器Espree确实支持扩展,甚至支持对象rest扩展(这是Espree支持的唯一实验特性)。有关更多信息,请参见:没错,我的原始答案仅适用于ESLint 1.x,我用2.x的信息更新了它
    ecmaFeatures
    已被弃用。使用
    ecmaVersion
    ecmaVersion:2018
    使用ESLint 5I时不会发出警告,我看不出此解决方案有任何问题-它对我来说工作正常。这比安装一个新的软件包更好!这个答案并没有给@JaysQubeXon的答案添加任何东西。事实上,它确实添加了-您得到了一个示例配置(包括parserOptions),很好地拥有了完整的示例++。它帮助我修复了一个TamperMonkey JS提示错误。@brasofilo您在TamperMonkey中在哪里更改eslint?@Metin,对于那些使用Thread的用户,请转到
    仪表板>设置>编辑器>自定义Linter配置
    纱线添加-D babel eslint
    。对于那些不知道在哪里添加
    解析器的用户:“babel eslint”
    配置语句,它在
    .eslintrc.json
    中。在我的例子中,它是一个JSON文件,但基本上是您的.eslintrc fileNote*如果您已经“弹出”了您的create react应用程序,并且正在向IDE添加eslint,那么babel eslint已经应用了。我发现这篇文章也很有帮助:我在我的eslintrc文件中添加了
    “parser”:“babel eslint”
    ,但却出现了多个错误。我正在使用react,它告诉我,我的导入组件已被调用,但从未使用过。这是wierd。谢谢,这修复了我的linting问题将
    emcaVersion
    更改为
    2020
    在React应用程序中使用
    var?.prop
    收到此错误时,帮了我一把。感谢您的发布。将
    ecmaVersion:2017
    更改为
    ecmaVersion:2020
    返回了一个错误:
    错误解析错误:无效的ecmaVersion
    。除了改到2020年,我还应该做些什么?我没有把
    ecmaVersion:2017
    改到
    ecmaVersion:2020
    我只是改了
    “脚本”:{“lint”:“eslint.”{
      "parserOptions": {
        "ecmaFeatures": {
          "experimentalObjectRestSpread": true
        }
      }
    }
    
    {
      "parserOptions": {
        "ecmaVersion": 2018
      }
    }