Eslint - `Parsing error: unexpected token =` error for assigned fat arrow / property initializer

Eslint - `Parsing error: unexpected token =` error for assigned fat arrow / property initializer

我正在使用箭头函数,它抱怨解析错误:

Parsing Error: Unexpected token =

但是我的代码是有效的(如果我弄错了请告诉我)。此外,我已经将 .eslintrc 设置设置为使用 es6 解析:

.eslintrc

{
    "parserOptions": {
        "ecmaVersion": 6,
    }
}

这是我的代码:

class foo() {
     // Doesn't like the line below
     // even though it is valid:
     namedFunction = () => {

     }

}

有办法解决这个错误吗?就特定函数的 this 值而言,这会产生巨大差异。

您正在使用 class 字段(a.k.a。属性 初始值设定项)语法,它不是 ECMAScript 2015 (ES6)、ES2016 或 2017 的一部分,因此不受支持通过 ESLint。目前是 Stage 3 proposal. If you want to use it with ESLint, you'll need to use babel-eslint。该页面描述了如何使用它,但要点是:

Installation

$ npm install eslint babel-eslint --save-dev
# or
$ yarn add eslint babel-eslint -D

Note: babel-eslint requires babel/core@>=7.2.0 and a valid Babel configuration file to run. If you do not have this already set up, please see the Babel Usage Guide.

Setup

To use babel-eslint, "babel-eslint" must be specified as the parser in your ESLint configuration file (see here for more detailed information).

.eslintrc.js

module.exports = {
  parser: "babel-eslint",
};

With the parser set, your configuration can be configured as described in the Configuring ESLint documentation.

我有一个非常相似的问题。就目前而言,接受的答案是正确的,而且非常有帮助。但是我使用的是 json 版本的 eslint 配置,而不是 javascript 版本,所以一旦安装了 babel-eslint,使用:

npm i eslint babel-eslint --save-dev

我不得不更改 json 配置。现在看起来像这样:

.eslintrc.json

{
  "parserOptions": {
    "es6": true,
    "ecmaVersion": 6,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "parser": "babel-eslint",
  "rules": {
    "no-unused-vars": 0
  },
  "env": {
    "browser": true,
    "node": true
  }
}

根据 the GitHub repo:

,2021 年 babel-eslint 似乎已被弃用,取而代之的是 @babel/eslint-parser

NOTE: babel-eslint is now @babel/eslint-parser and has moved into the Babel monorepo.

因此,要更新其他答案的说明,您需要:

npm i eslint @babel/eslint-parser --save-dev

然后确保在 .eslintrc 中配置 parser 键:

{
  "parser": "@babel/eslint-parser",
  ...
}

顺便说一句,由于 OP 没有提到运行时,我在 Node 12 中 运行 所以我不需要 babel 来转换我的代码,但 ESlint 需要 需要 babel 来检查代码(听起来很奇怪,但这是我的理解)。所以我还需要一个基本的 babel 配置,babel.config.json:

{
  "presets": [
    [
      "@babel/env",
      {
        "targets": {
          "node": "12"
        }
      }
    ]
  ]
}