Eslint 无法识别使用 nodejs 12 的私有字段声明

Dou*_*eri 13 private private-members node.js eslint

Eslint 不会识别类声明中标有 # 的私有字段,即使我使用的是 NodeJS 版本 12(支持它们)。

我正在运行 NodeJS v12.7.0。我已经搜索了所有 DuckDuckGo 和 Google,但在 eslint 中找不到一个插件或选项来告诉它接受私有字段符号 (#)。我已经emca设置为 version 10

class MyClass {
   #foo = 'bar';
   #bar = 'foo';

   constructor(foo, bar) {
      this.#foo = foo;
      this.#bar = bar;
   }
   ...
};
Run Code Online (Sandbox Code Playgroud)

当我运行eslint上面的代码时,我得到:

2:3 error Parsing error: Unexpected character '#'

我正在处理的项目不使用 Babel,我不想仅仅为了使私有字段工作而必须包含它。任何想法如何使这项工作无需求助于使用 Babel?

(当然没有反对 Babel,只是在这个特定的项目上我不想要它)。

woo*_*nos 33

2021 更新:您不再需要 babel 了!

您只需将 eslint 更新至v8.0.0及以上即可。

请参阅 eslint 发行说明:https://eslint.org/blog/2021/10/eslint-v8.0.0-released#highlights

确保它在您的.eslintrc文件或类似文件中:

{
    "parserOptions": {
        "ecmaVersion": 13
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以只使用latest版本 13,而不是专门使用版本 13。


Mic*_*ski 12

我认为您可能不得不硬着头皮使用babel-eslinthttps : //github.com/babel/babel-eslint,这需要您安装babel/core@>=7.2.0

尽管私有类字段包含在节点 12 中,但根据规范(截至 2019 年 8 月),它仍然是第 3 阶段的实验性功能

npm install eslint babel-eslint --save-dev
# or
yarn add eslint babel-eslint -D
Run Code Online (Sandbox Code Playgroud)

并添加

  "parser": "babel-eslint",

Run Code Online (Sandbox Code Playgroud)

到你的.eslintrc.js文件

  • 顺便说一句,这有效!无缝插入。非常感谢! (3认同)

小智 11

赞成的答案有点过时了,babel-eslint 包已经更改,此外,您还需要确保也配置了 Babel,在我的情况下,我在服务器上,所以不是。

我在这里写了关于解决方案的博客:https : //dev.to/griffadev/setting-up-eslint-to-work-with-new-or-proposed-javascript-features-such-as-private-class-fields-5fm7

特尔;博士:

npm i eslint @babel/core @babel/eslint-parser @babel/preset-env -D
Run Code Online (Sandbox Code Playgroud)

示例 .eslintrc

{
    "env": {
        "browser": true,
        "es2021": true,
        "node": true
    },
    "extends": "eslint:recommended",
    "parser": "@babel/eslint-parser",
    "parserOptions": {
        "ecmaVersion": 12,
        "sourceType": "module"
    },
    "rules": {
    }
}
Run Code Online (Sandbox Code Playgroud)

配置 .babelrc

{
    "presets": [
      ["@babel/preset-env",
      {
        "shippedProposals": true
      }]
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果你正在使用 Jest 并且你还没有配置 .babelrc,它会开始获取这个新文件,这可能是一个问题。您可以通过将 .babelrc 文件重命名为其他内容并更新 eslint 配置文件来解决此问题:

"babelOptions": {
    "configFile": "./.babel-eslintrc"
 }

Run Code Online (Sandbox Code Playgroud)