![](/img/trans.png)
[英]How to configure eslint for ES6 class with private methods correctly?
[英]How do I configure ESLint to allow fat arrow class methods
ESLint 抛出Parsing error: Unexpected token =
error when I try to lint Es6 classes。 我缺少什么配置参数来启用 eslint 中的胖箭头类方法?
示例类:
class App extends React.Component{
...
handleClick = (evt) => {
...
}
}
.eslint
{
"ecmaFeatures": {
"jsx": true,
"modules":true,
"arrowFunctions":true,
"classes":true,
"spread":true,
},
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"strict": 0,
"no-underscore-dangle": 0,
"quotes": [
2,
"single"
],
}
}
如果要使用实验性功能(例如箭头作为类方法),则需要使用babel-eslint
作为解析器。 默认解析器 (Espree) 不支持实验性功能。
首先安装babel-eslint
:
npm i -D babel-eslint
然后将以下内容添加到您的.eslintrc.json
文件中:
"parser": "babel-eslint"
首先安装这些插件:
npm i -D babel-eslint eslint-plugin-babel
然后将这些设置添加到您的 eslint 配置文件中:
.eslintrc.json
{
"plugins": [ "babel" ],
"parser": "babel-eslint",
"rules": {
"no-invalid-this": 0,
"babel/no-invalid-this": 1,
}
}
这样你就可以使用粗箭头类方法,而且你不会从 eslint 得到任何no-invalid-this
错误。
快乐编码
从我在错误消息Parsing error: Unexpected token =
读到的内容,它看起来更像是解析器错误而不是 linter 错误。
假设你使用Babel作为你的 JavaScript 编译器/转译器和babel-eslint
作为你的 ESLint 解析器,很可能是 Babel 抱怨语法,而不是 ESLint。
问题不在于箭头函数,而是一些更具实验性的(ES7??),我认为它被称为属性初始值设定项或类实例字段(或两者:))。
如果你想使用这个新的语法/特性,你需要在 Babel 中启用preset-stage-1
。 此预设包括允许该语法的syntax-class-properties
插件。
加起来:
安装 babel 预设:
npm install babel-preset-stage-1
将此预设添加到您的预设列表中(我想您已经在使用es2015
和react
预设),无论是在您的.babelrc
还是在您使用 webpack 的babel-loader
查询字段中。
"presets": ["es2015", "stage-1", "react"]
我今天遇到了同样的问题
@dreyescat 的答案对我有用。
默认情况下,babel 使用 3 个预设: es2015
、 react
、 stage-2
然后,如果您还选择了stage-1
预设,则错误消失了
你可以自己在bebeljs.io网站上测试一下
我的问题是 eslint 使用的是全局安装的版本而不是我的本地版本,并且全局 eslint 无法访问我本地安装的 babel-eslint parser 。 此外,由于我全局安装的 eslint 安装在不同版本的节点上,因此删除它并非易事。
babel-eslint
eslint。eslint .
是否得到不同的输出eslint .
和npx eslint .
. 如果你得到不同的输出,很可能是你的全局 eslint 无法访问 babel-eslint。对于大多数人来说,以下命令应该使用 npm 卸载 eslint(使用 npm卸载全局包)和 yarn( 使用 yarn 卸载全局包):
# npm
npm uninstall -g eslint
npm uninstall eslint
# yarn
yarn global remove eslint
接下来,运行npx eslint .
看看事情是否奏效。 如果不是,这对我来说不是,您需要采取额外的步骤来删除全局安装的 eslint。
从这个答案中,我了解到我在 Node 的系统版本而不是我当前版本的 Node 上安装了 eslint(我使用的是 nvm)。 按照这些简单的步骤删除全局 eslint,你应该很高兴!
您的示例不是有效的 ES6,因此无法配置 eslint 以允许它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.