ESLint配置extends继承后自定义规则不生效怎么办?
我在项目里用eslint-config-airbnb配置了基础规范,然后在项目根目录的.eslintrc.js里加了自定义规则:
module.exports = {
extends: ['airbnb'],
rules: {
'indent': ['error', 2],
'quotes': ['error', 'single']
}
};
但发现缩进还是按照airbnb要求的2个空格生效了,而引号规则却变成了双引号(airbnb默认是单引号)。明明同时改了两个规则,为什么其中一个生效另一个没生效呢?重启编辑器和终端都没用,是不是extends继承的顺序有问题?
先看你的配置:
**先说结论**:你的配置本身没问题,但很可能被编辑器的默认设置覆盖了。
### 第一步:确认ESLint是否真的生效
先验证ESLint是否在项目中正常运行:
如果报错说明ESLint本身没问题,否则可能是整个ESLint都没跑起来。
### 第二步:检查编辑器插件配置
你提到"引号"不生效,这很可能是因为你用的是 VSCode,它默认有自己的引号自动修复逻辑。
#### VSCode 用户应该加这个配置:
在
.vscode/settings.json加:> 这一步原理是让VSCode优先使用ESLint的格式规则,而不是Prettier或其他默认格式化工具。
### 第三步:检查是否有冲突的配置文件
确认项目中没有其他配置文件干扰,比如:
-
.eslintrc-
.eslintrc.json-
.prettierrc-
package.json里有没有eslintConfig字段### 第四步:检查airbnb是否引入了react等子规则
如果你项目里用了React,建议这样写:
如果是React Native:
### 第五步:验证规则是否被覆盖
有些规则可能在
extends的配置里被覆盖了。你可以用下面这个技巧来调试:### 最后:重启编辑器
有时候VSCode需要完全重启才能加载新的ESLint配置,特别是修改了
.vscode/settings.json后。### 总结
你的ESLint配置本身没问题,问题大概率出在:
1. 编辑器插件配置
2. 其他格式化工具冲突
3. 多个ESLint配置文件共存
你先按上面步骤排查下,如果还有问题可以贴下
package.json和.vscode/settings.json内容,我再帮你看看。extends在前,rules在后,理论上是没问题的,但有时候插件加载顺序会出幺蛾子。直接给你个靠谱的解决方案:把
extends和rules换个位置试试。这样写能确保你的自定义规则优先被解析,然后再应用airbnb的基础规则。如果还是不行,可能是插件版本的问题,试着更新一下
eslint-config-airbnb和eslint的版本。说实话,这类问题真的很蛋疼,经常是因为插件内部实现的细节导致的。折腾几次就熟悉套路了。