Eslint配置无非就是那几个选项,如果每次新建一个项目,都从0开始配置的话太麻烦,现在借助eslintextend特性,可大大减少时间。

其实@TTT/eslint-config-TTT自己就是一个extend,但是它只提供了对JS的配置,如果项目中包含ts/vue/react等,还需要额外的依赖安装、配置。

此外,之前项目中有这种写法:

// .eslintrc.js
module.exports = {
  extends: [
    '@TTT/eslint-config-TTT', '@TTT/eslint-config-TTT/ts'
  ],
};

这种写法的问题是,对JS文件也运用了ts的规则,比如@typescript-eslint/prefer-optional-chain等规则。对一个JS/TS混写的老项目,如果按照上面的配置,会有大量需要改写的内容。

优化方法就是借助overrides配置,该属性可以为某种类型的文件,进行额外的配置,比如:

overrides: [
  {
    files: ['*.ts'],
    extends: ['./base.js', './ts.js'],
  },
]

对于vue/react文件,也是是类似的配置。

overrides: [
  {
    files: ['*.jsx'],
    extends: ['./react.js', './base.js'],
  },
  {
    files: ['*.tsx'],
    extends: ['./react.js', './base.js', './ts.js'],
  },
  {
    files: ['*.vue'],
    extends: ['./base.js', './vue.js'],
  },
]

然后将上述配置发布到npm,使用的时候就很简单了:

// .eslintrc.js
module.exports = {
  extends: ['xxx'],
};