Eslint 不识别使用 nodejs 12 的私有字段声明
Eslint does not recognize private field declaration using nodejs 12
Eslint 不会识别在 class 声明中标有 # 的私有字段,即使我使用的是 NodeJS 版本 12(支持它们)。
我是 运行ning NodeJS v12.7.0。我已经搜索了所有 DuckDuckGo 和 Google,但我在 eslint 中找不到一个插件或选项来告诉它接受私有字段符号 (#)。我已将 emca
设置为版本 10
。
class MyClass {
#foo = 'bar';
#bar = 'foo';
constructor(foo, bar) {
this.#foo = foo;
this.#bar = bar;
}
...
};
当我 运行 eslint
上面的代码时,我得到:
2:3 error Parsing error: Unexpected character '#'
我正在处理的项目不使用 Babel,我不想为了让私有字段工作而必须包含它。有什么想法可以在不使用 Babel 的情况下完成这项工作吗?
(当然没有什么反对 Babel 的,只是在这个特定的项目上我不想要它)。
我认为你可能不得不硬着头皮使用babel-eslint
:https://github.com/babel/babel-eslint,这需要你安装babel/core@>=7.2.0
尽管私有 class 字段包含在节点 12 中,但根据 spec(截至 2019 年 8 月)
,它仍然是第 3 阶段实验性功能
npm install eslint babel-eslint --save-dev
# or
yarn add eslint babel-eslint -D
并添加
"parser": "babel-eslint",
到您的 .eslintrc.js
文件
赞成的答案有点过时了,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
示例.eslintrc
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parser": "@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
}
}
配置.babelrc
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true
}]
]
}
如果您正在使用 Jest 并且您还没有配置 .babelrc,它将开始获取这个新文件,这可能是个问题。
您可以通过将 .babelrc 文件重命名为其他名称并更新 eslint 配置文件来解决此问题:
"babelOptions": {
"configFile": "./.babel-eslintrc"
}
关于 Visual Studio 2019,我发现 @babel/eslint-parser
不适用于它,但较旧的 babel-eslint
可以。根据@George 的回答进行其他设置。
Visual Studio 回答时的 2019 版本:16.9.5
除非你真的,真的想要那个特定的文件,否则我会避免添加新的依赖项只是为了让测试通过。在这种情况下,我的建议是添加
ignorePatterns: ["path/to/file(s).js"],
在您的 .eslintrc.js
文件中。这将避免检查该特定文件。如果您真的 想要对其进行 lint,请将 # 替换为 __,lint,然后将其改回。我知道,这是一个 hack,但它不会引入任何类型的依赖性并且它有效。
2021 年更新:您不再需要 babel 了!
您只需将 eslint 更新到 v8.0.0
及更高版本即可。
查看 eslint 发行说明:https://eslint.org/blog/2021/10/eslint-v8.0.0-released#highlights
确保这在您的 .eslintrc
文件或类似文件中:
{
"parserOptions": {
"ecmaVersion": 13
}
}
您也可以只使用 latest
而不是特定版本 13。
Eslint 不会识别在 class 声明中标有 # 的私有字段,即使我使用的是 NodeJS 版本 12(支持它们)。
我是 运行ning NodeJS v12.7.0。我已经搜索了所有 DuckDuckGo 和 Google,但我在 eslint 中找不到一个插件或选项来告诉它接受私有字段符号 (#)。我已将 emca
设置为版本 10
。
class MyClass {
#foo = 'bar';
#bar = 'foo';
constructor(foo, bar) {
this.#foo = foo;
this.#bar = bar;
}
...
};
当我 运行 eslint
上面的代码时,我得到:
2:3 error Parsing error: Unexpected character '#'
我正在处理的项目不使用 Babel,我不想为了让私有字段工作而必须包含它。有什么想法可以在不使用 Babel 的情况下完成这项工作吗?
(当然没有什么反对 Babel 的,只是在这个特定的项目上我不想要它)。
我认为你可能不得不硬着头皮使用babel-eslint
:https://github.com/babel/babel-eslint,这需要你安装babel/core@>=7.2.0
尽管私有 class 字段包含在节点 12 中,但根据 spec(截至 2019 年 8 月)
,它仍然是第 3 阶段实验性功能npm install eslint babel-eslint --save-dev
# or
yarn add eslint babel-eslint -D
并添加
"parser": "babel-eslint",
到您的 .eslintrc.js
文件
赞成的答案有点过时了,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
示例.eslintrc
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parser": "@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
}
}
配置.babelrc
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true
}]
]
}
如果您正在使用 Jest 并且您还没有配置 .babelrc,它将开始获取这个新文件,这可能是个问题。 您可以通过将 .babelrc 文件重命名为其他名称并更新 eslint 配置文件来解决此问题:
"babelOptions": {
"configFile": "./.babel-eslintrc"
}
关于 Visual Studio 2019,我发现 @babel/eslint-parser
不适用于它,但较旧的 babel-eslint
可以。根据@George 的回答进行其他设置。
Visual Studio 回答时的 2019 版本:16.9.5
除非你真的,真的想要那个特定的文件,否则我会避免添加新的依赖项只是为了让测试通过。在这种情况下,我的建议是添加
ignorePatterns: ["path/to/file(s).js"],
在您的 .eslintrc.js
文件中。这将避免检查该特定文件。如果您真的 想要对其进行 lint,请将 # 替换为 __,lint,然后将其改回。我知道,这是一个 hack,但它不会引入任何类型的依赖性并且它有效。
2021 年更新:您不再需要 babel 了!
您只需将 eslint 更新到 v8.0.0
及更高版本即可。
查看 eslint 发行说明:https://eslint.org/blog/2021/10/eslint-v8.0.0-released#highlights
确保这在您的 .eslintrc
文件或类似文件中:
{
"parserOptions": {
"ecmaVersion": 13
}
}
您也可以只使用 latest
而不是特定版本 13。