基础配置

0 阅读4分钟

ESlint 配置

eslint两种主要的配置方式

Configuration Comments(配置注释):使用js注释,将配置信息直接嵌入到单个文件中。也就是生成在单个文件的配置,不

侵入全局配置

Configuration Files (配置文件):使用js文件,为整个目录及其所有子目录指定配置信息。也就是生成在整个项目的配置,做

到统一管理

eslint中可以配置的核心选项

  • Globals(全局变量)

    告诉eslint哪些全局变量是合法的,避免 no-undef 规则误报。browser(浏览器全局变量)、node(node全局变量)、自定义

  • Rules(规则)

    eslint的核心,定义哪些规则开启以及错误级别(off / warn / error)

  • Plugin(插件)

    扩展eslint能力,支持框架、ts、非标准语法等


配置优先级

后定义覆盖先定义,局部覆盖全局(优先级从高到低)

1.行内配置(Inline Config):代码注释中的规则,优先级最高

2.配置文件后定义的配置对象:flat Config数组中,后面的配置覆盖前面的

3. 配置文件中先定义的配置对象

4.继承的可共享配置

5.eslint内置默认规则,优先级最低


file和ignore

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	// matches all files ending with .js
	{
		files: ["**/*.js"],
		rules: {
			semi: "error",
		},
	},

	// matches all files ending with .js except those in __tests
	{
		files: ["**/*.js"],
		ignores: ["__tests/**"],
		rules: {
			"no-console": "error",
		},
	},
]);

其中 files

---- *.js 表示匹配当前目录所有的js文件

---- ** / *.js表示匹配所有子目录的js文件

---- ! 取反, !** /——tests—— / **表示排除test目录

---- **/ *.{js,ts,vue} 匹配js/ts/vue 文件

全局忽略和局部忽略

如果配置对象仅写了ignore没有其他属性,那就是全局忽略

如果和files、rules写在一起,就是局部忽略,仅对当前配置对象起作用

eslint本身没有files/ignore的指定配置对象,如果没有配置,它会自动应用到其他配置对象匹配到的所有文件

也就是说如果你这个对象没配置,它就会变成全局规则,就会对所有的eslint检查文件生效。简单来说,比如我写了一条规则,但是我没有file和ignore,那我就会变成全局规则,我写的规则要对全局生效


plugin

本质是一个npm包,用来给eslint扩展能力,没有plugineslint只能检查原生js,不能检查vue、ts等

常见插件

  • elint-plugin-vue--检查vue
  • typescript-eslint/eslint-plugin--检查ts
  • eslint-plugin-import--检查导入导出
  • eslint-plugin-prettier--把prettier规则变成eslint规则
  • eslint-plugin-html--检查html里面的js

先import,再在plugin里注册


extends

extends 就是继承别人的一套规则,先import插件,再在extends里引用

extends能启用什么

1.官方推荐规则

2.插件提供的配置(比如:plugin:vue/recommended)

3.第三方共享配置 (比如:eslint-config-airbnb-base)

常见extends值

  • js/recommended--官方js推荐规则
  • plugin:vue/essential--vue基础规则
  • plugin:vue/recommended--vue完整规则
  • plugin:@typescript-eslint/recommanded--ts推荐规则

languageOptions

是eslint配置对象的内置属性,用来配置代码的语言环境

配置全局变量

解决 window / document / process 等环境变量报错 no-undof 错误的问题

languageOptions: {
  global: global.browser
  // 声明浏览器环境的所有全局变量,可选
}

配置解析器

解决eslint 不认识ts/es6+语法的问题

默认解析器是 espree(解析js)

languageOptions: {
  parser: tsParser
  // 用ts解析器解析ts代码
  parserOptions: {
    ecmaVersion: "latest"
    // 支持最新ES语法(默认就是latest,可以省略)
    sourceType: "module"
    // 声明ES模块(前端项目默认,可以省略)
  }
}

核心逻辑

languageOption是配置对象的属性,作用范围由 failes决定,可以给不同文件配置不同的语言环境

Parser

由于eslint看不懂源代码,需要靠parser把代码翻译成ast,让eslint能检查

parser默认解析器是espree,不同的文件有不同的解析器

processor

从非js文件里找到js文件交给eslint检查。把js/ts翻译成ast,再从.vue / .html 等文件里面提取js块

export default defineConfig([
  {
    files: ["**/*.vue"],
    processor: "vue/vue",
    parser: "vue-eslint-parser"
  }
])