Eslint
1、Eslint初始化
1、安装eslint脚手架 pnpm i eslint -D
2、初始化eslint npx eslint --lint 执行 初始化命令后根据所需 回车,如下图
3、eslint 会帮我们生成 .eslintrc.cjs 配置文件 以 react项目为例,安装如下依赖
pnpm i eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest -D
2、.eslintrc.cjs 配置讲解
- parser (解析器)
ESlint 底层默认使用Espree来进行抽象语法树解析,这个解析器基于Acron来实现,能够解析绝大多数ESMAScript规范的语法,但是不支持TypeScript,所以需要引入其他解析器完成TS的解析。 社区提供了 @typescript-eslint/parser ,专门为了解析TypeScript, 可以将TypeScript代码 转换为Espree 能够识别的Estree格式。
- parserOptions (解析器选项) 对parser 解析器进行配置,ESlint默认支持ES5语法
- ecmaVersion: 可以配置ES+数字(如ES6)或 ES+年份(如2015),也可以直接配置为 latest,来启用最新ES语法
- sourceType: 默认为script, 如果使用ES Module则应该设置为 module
- ecmaFeatures: 值为一个对象,表示想要使用的额外语言特性 如下配置JSX
ecmaFeatures: { jsx: true }
3. rules(具体代码规则)
在ESlint中 手动调整那些代码规则,比如禁止在if语句中使用赋值语句
// .eslintrc.js
module.exports = {
// 其它配置省略
rules: {
// key 为规则名,value 配置内容
"no-cond-assign": ["error", "always"] // 数组第一项为规则的 `ID`,第二项为`规则的配置`
}
}
规则的ID 所有的语法规则通用,
- off 或 0 : 表示关闭规则。
- warn 或1: 表示开启规则,在违背规则后只抛出warning,而不会导致程序退出
- error或2: 表示开启规则,不过违背规则后抛出error,程序会退出
规则的配置具体规则配置会不一样 参考 cn.eslint.org/docs/rules/
也能直接将
rules对象的value配置成 ID,如:"no-cond-assign": "error"
4、plugins
正如ESLint不能直接解析TS,ESLint本身也没有内置 TS的代码规则。这时候就需要通过ESLint插件来增加一些特定规则 ,这就是 plugins的用法
// 添加 TS 规则 @typescript-eslint/eslint-plugin,`eslint-plugin` 可以省略
plugins: ['@typescript-eslint']
插件添加后只是拓展了ESLint本身规则集,但是ESLint默认没有开启这些规则校验,如果要开启或者调整规则,还需要在rules中进行配置
// 开启一些 TS 规则
rules: {
'@typescript-eslint/ban-ts-comment': 'error',
'@typescript-eslint/no-explicit-any': 'warn',
}
5、extends(继承配置)
继承 另一份ESLint配置,可以配置为字符串或者一个字符串数组
"extends": [
// 第1种情况 从ESLint本身继承
"eslint:recommended",
// 第2种情况,从类似 `eslint-config-xxx` 的 npm 包继承
// 一般配置的时候可以省略 `eslint-config`
"standard"
// 第3种情况,从ESLint 插件继承
//可以省略包名中的 `eslint-plugin`
// 格式一般为: `plugin:${pluginName}/${configName}`
"plugin:react/recommended"
"plugin:@typescript-eslint/recommended",
]
有了 extends 的配置 ,对于之前 ESLint插件中的繁多配置, 就不需要手动逐个开启了,如第三种情况,继承即开启
6. env和globals
env是指运行环境,
"env": {
// 配置后会启用浏览器和Node.js环境,这两个环境中全局变量会同时启用
"browser": "true",
"node": "true"
}
globals配置声明全局变量(有些全局变量是业务代码引入的第三方库所声明)
"writable"或者true,表示变量可重写"readonly"或者false,表示变量不可重写"off",表示禁用该全局变量
JQuery为例
"globals": {
// 不可重写
"$": false,
"jQuery": false
}
Prettier (用于代码格式化)
ESLint主要用于代码风格检查并给出提示(虽然具备自动格式化代码功能,但不如Prettier专业)
1、安装 Prettier pnpm i preitter -D
新建 .prettierrc.cjs 内容如下
module.exports = {
printWidth: 80, //一行的字符数,如果超过会进行换行,默认为80
tabWidth: 2, // 一个 tab 代表几个空格数,默认为 2 个
useTabs: false, //是否使用 tab 进行缩进,默认为false,表示用空格进行缩减
singleQuote: true, // 字符串是否使用单引号,默认为 false,使用双引号
semi: true, // 行尾是否使用分号,默认为true
trailingComma: "none", // 是否使用尾逗号
bracketSpacing: true // 对象大括号之间是否有空格,默认为 true,效果:{ a: 1 }
};
安装 将
Prettier集成到ESLint工具中的安装包
pnpm i eslint-config-prettier eslint-plugin-prettier -D
// eslint-config-prettier 用来覆盖 ESLint 本身的规则
// eslint-plugin-prettier 用于prittier 接管 eslint修复代码的能力
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
// 1、接入prettier的规则
"prettier",
"plugin:prettier/recommended"
],
"overrides": [
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react",
"@typescript-eslint",
// 2. 加入 prettier 的 eslint 插件
"preittier"
],
"rules": {
// 3. 开启 prettier 自动修复的功能
"prettier/prettier": "error",
"indent": [
"error",
"tab"
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"always"
]
}
};
package.json
scripts:{
"lint:script": "eslint --ext .js,.jsx,.ts,.tsx --fix --quiet ./",
}
注意 根目录 增加 .eslintignore忽略检查语法配置
**/dist/**
**/node_modules/**
package.json
*.d.ts
.eslintrc.js
tsconfig.json
在 Vite 中接入 ESLint
安装 pnpm i vite-plugin-eslint -D
// vite.config.ts
import viteEslint from 'vite-plugin-eslint';
//具体配置
{
plugins: [
// 省略其它插件
viteEslint(),
]
}
重新启动项目 ,ESLint 错误可以及时的显示到命令行窗口