Babel.js 为什么ESLint无法识别我的类箭头函数?

omhiaaxx  于 2022-12-08  发布在  Babel
关注(0)|答案(2)|浏览(339)

我遵循了关于How do I configure ESLint to allow fat arrow class methods的建议,即将解析器设置为babel-eslint
我安装了它,并更新了我的配置文件如下:

{
  "parserOptions": {
    "parser": "babel-eslint",
    "ecmaVersion": 12,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "rules": {
    "semi": "error",
    "indent": ["error", 2],
    "eqeqeq": ["error", "always"],
    "max-depth": ["error", 5],
    "space-before-function-paren": ["error", "never"],
    "template-curly-spacing": ["error", "always"],
    "quotes": ["error", "single", { "allowTemplateLiterals": true }],
    "curly": "error",
    "brace-style": ["error", "1tbs"],
    "space-before-blocks": "error"
  }
}

但是,它仍然会破坏eslint,并给出如下解析错误:

class Person {
  constructor() {
    console.log(this);
    this.hello1();
    this.hello2();
  }

  // breaks eslint, but WHY?

  hello1 = () => {
    console.log(this);
  }
  
  hello2() {
    console.log(this);
  }

}
const P1 = new Person();

它突出显示了第一个=,并说:
解析错误,意外标记=
如何进一步解决此问题?ESLint正确应用了此文件中的所有规则,但似乎忽略了解析器选项。
还是别的什么?
我不确定这是否与此处相关:
https://github.com/babel/babel-eslint#note-babel-eslint-is-now-babeleslint-parser-and-has-moved-into-the-babel-monorepo
但我不知道那是什么意思。

9o685dep

9o685dep1#

我认为您之所以会遇到linting错误,是因为您没有使用ECMA版本2022(也称为ECMA latest)。请查看www.example.com上的此链接shorturl.at/nsAS5,该链接显示fat arrow类方法上没有lint错误,因为ECMA版本是最新的2022。当您将ECMA版本更改为2021或更低版本时,您会遇到Parsing Error unexpected token =错误。
此外,我还注意到关于您的eslintrc.json的一些事情:
1.我想这可能是因为babel-eslint被弃用了?https://www.npmjs.com/package/babel-eslint。也许你应该试试@babel/eslint-parser?https://www.npmjs.com/package/@babel/eslint-parser
1.你的配置看起来有点不对。你应该把parser键放在parserOptions键之外,如下所示:

"parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 12,
    "sourceType": "module",
    "ecmaFeatures": {
      "jsx": true
    }
  },

请参阅https://eslint.org/docs/user-guide/configuring/language-options
另外,我只想指出,eslint默认使用espree作为它的解析器,但是您可以使用esprima或@babel/eslint-parser(如果您使用的是typescript,则可以使用@typescript-eslint/parser)参见https://eslint.org/docs/user-guide/configuring/plugins

wwtsj6pe

wwtsj6pe2#

您的配置文件不正确:
这一行在这里:

"parser": "babel-eslint",

没有执行任何操作。不幸的是,它不会抛出错误并继续使用默认解析器。
一旦你完成了这一步,你就可以开始使用Babel解析器了,如果其余的依赖项都安装正确的话。

相关问题