ESLint
ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。
使用 ESLint 需要我们在项目的根目录下添加 .eslintrc.js 或 .eslintrc.json 文件,在其中导出配置对象,下面是示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40{
"root": true,
// 继承已有配置对象
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
// 如何理解代码
"parser": "@typescript-eslint/parser",
"parserOptions": { "project": ["./tsconfig.json"] },
// 添加哪些规则
"plugins": [
"@typescript-eslint"
],
// 已添加规则的开启 / 关闭
"rules": {
"@typescript-eslint/strict-boolean-expressions": [
2,
{
"allowString" : false,
"allowNumber" : false
}
]
},
// 对特殊文件应用特殊配置
"overrides": [
{
"files": ["*.vue"],
"rules": {
// 所有 .vue 文件除了应用上面的公共规则配置外,还需应用的独特规则配置。
},
},
],
}- ESLint 理解代码
parser 和 parserOptions 选项与 ESLint 如何理解我们的代码相关。这里分析器 @typescript-eslint/parser 负责解析 TypeScript 语言,将代码转化为 AST 语法树,便于进行分析。而 parserOptions 可以对解析器的能力进行详细设置。 - ESLint 判断代码规范
ESLint 提供了 自定义规则 的接口,开发者需要遵照接口,根据分析器的 AST 产物,实现规范检查逻辑,再将实现的多条规范聚合为 plugin 插件的形式。plugin 字段指定了 ESLint 应用什么规则集,具有理解哪些规范的能力 - 规则的启用与禁用
有了规则集,能够理解规范,不代表 ESLint 就要对不规范的内容做出响应,还需要进一步在 rules 字段中对这些规则进行开启或者关闭的声明,只有开启的规则才会生效。 - 继承已有配置
面对琳琅满目的规则集,我们完全在项目中配置是不可取的。因此社区逐渐演进出了许多配置预设,让我们可以一键继承,从而减少绝大多数手动配置的工作量。例如例子中的 eslint:recommended、plugin:@typescript-eslint/recommended 就代表继承了 eslint 和 typescript-eslint 的推荐配置。 - 配置的重写
如果我们希望某些文件应用一些独特的配置,可以使用 overrides 字段实现。overrides 的每个成员对象都需要指定目标文件,除了应用所有父级配置之外,还要应用成员对象中声明的独有配置。ESLint 支持文件级别的重写。
- ESLint 理解代码
依赖安装
- 安装 eslint 核心工具
pnpm i -wD eslint - 安装 typescript-eslint 系列工具解析 typescript,为了解析 Vue 语法也要安装 vue-eslint-parser
pnpm i -wD @typescript-eslint/parser @typescript-eslint/eslint-plugin vue-eslint-parser - import 模块引入相关的规则
pnpm i -wD eslint-plugin-import eslint-plugin-vue - 选择一个熟悉的规则安装,这里选择 Airbnb 规则集
pnpm i -wD eslint-config-airbnb-base eslint-config-airbnb-typescript - 安装 eslint-define-config,方便编写.eslintrc.js 文件时,提供完善的类型支持
pnpm i -wD eslint-define-config
配置
我们在根目录建立 .eslintrc.js 文件,作为 ESLint 的配置文件。
1 | const { defineConfig } = require('eslint-define-config'); |
对于一些我们不希望应用 ESLint 检查的内容,我们可以通过 .eslintignore 文件将之排除,.eslintignore 的规则与 .gitignore 的规则完全相同。我们排除 ESLint 对依赖目录与产物目录的检查。
1 | node_modules |
之后,我们在 package.json 中加入 eslint 检查的脚本,并尝试执行检查。
1 | // 其他配置... |
执行
1 | pnpm run lint:script |
正确配置后,ESLint 能检查出不少错误,包括了 .vue、.ts 文件。