extends
属性可以用来配置继承或扩展。
在实际应用中,它会包含 rules
、plugins
和 language options
属性。
5-1.基础使用
extends
属性值可以是:
- 指定配置字符串:配置文件的路径、可共享配置的名称(
eslint-config-*
、eslint-plugin-*
)、eslint
内置配置(eslint:recommended
或eslint:all
)。 - 字符串数组:一系列字符串配置的集合。每个配置继承它前面的配置。
module.exports = {
extends: [
'plugin:vue/essential',
'@vue/standard',
'./lib/rules'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
}
}
5-2.配置的优先级
事实上 extends
有 3
种含义的配置:
- 基础配置
- 派生配置
- 合并结果配置
以 rules
选项为例来说明,这 3
种配置的实际执行效果:
- 如果派生配置没有与基础配置冲突的配置,此时相当于启用了额外配置,完全的追加效果。
- 当规则冲突时,以派生配置为主,但该条规则的配置选项不变:
- 基础配置:
"eqeqeq": ["error", "allow-null"]
- 派生配置:
"eqeqeq": "warn"
- 合并结果配置:
"eqeqeq": ["warn", "allow-null"]
- 当规则的配置选项冲突时,以派生配置为主,覆盖基础配置中的规则配置选项:
- 基础配置:
"quotes": ["error", "single", "avoid-escape"]
- 派生配置:
"quotes": ["error", "single"]
- 合并结果配置:
"quotes": ["error", "single"]
- 当规则的配置选项冲突时,以派生配置为主,如果是对象形式时:
- 基础配置:
"max-lines": ["error", { "max": 200, "skipBlankLines": true, "skipComments": true }]
- 派生配置:
"max-lines": ["error", { "max": 100 }]
- 合并结果配置:
"max-lines": ["error", { "max": 100 }]
TIP
基础配置,应当指的是 Eslint
自带的配置。
可以总结成一句话,当基础配置与派生配置冲突时,统一以派生配置为主,无论是 rules
中的某一条规则还是该条规则的配置选项。
配置文件的路径,可以是绝对路径或者相对路径(相对于 .eslintrc.*
等配置文件)。这里有一个例子:
module.exports = {
extends: [
'./lib/rules.js'
],
rules: {
}
}
5-3.可共享配置
可共享配置指的其实就是 npm
上的第三方包,分为两部分:
- 配置包,即第三方配置包,它可以是
config
配置或者plugin
中的配置。 - 内置配置,即
Eslint
内置配置包。
第三方配置包,它们一般都有特定的命名格式 eslint-config-*
。
TIP
在 extends
中配置 eslint-config-*
时,是可以省略 eslint-config-
前缀的。
也可以省略 eslint-plugin-*
。
譬如 airbnb-base
可以写作 eslint-config-airbnb
,plugin:vue/vue3-essential
代表的是 eslint-plugin-vue/vue3-essential
。
module.exports = {
extends: [
'plugin:vue/vue3-essential',
'airbnb-base',
]
}
5-4.内置配置
eslint:recommended
和 eslint:all
是 eslint
内置的部分配置。
关于 eslint:recommended
,它会启用 eslint
推荐使用的核心语法。
可以在这里 rules 查到一部分相关配置介绍。
例子:
module.exports = {
extends: 'eslint:recommended',
rules: {
// enable additional rules
"indent": ["error", 2],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "double"],
"semi": ["error", "always"],
// override configuration set by extending "eslint:recommended"
"no-empty": "warn",
"no-cond-assign": ["error", "always"],
// disable rules from base configurations
"for-direction": "off"
}
}
关于 eslint:all
,它会启用 eslint
所有的核心语法。
但要注意的是,该配置并不推荐在业务项目中使用。
因为该配置会随着 Eslint
的版本变动而发生改动,使用时需要自己评估风险。
module.exports = {
"extends": "eslint:all",
"rules": {
// override default options
"comma-dangle": ["error", "always"],
"indent": ["error", 2],
"no-cond-assign": ["error", "always"],
// disable now, but enable in the future
"one-var": "off", // ["error", "never"]
// disable
"init-declarations": "off",
"no-console": "off",
"no-inline-comments": "off",
}
}