5分钟带你了解eslint配置及Prettier集成2022年最新版|5分钟带你了解eslint配置及Prettier集成2022年最新版 #eslint8
eslint 基本配置
温馨提示:文章内容基于当前最新的eslint8版本
命令生成eslint配置文件
npm init @eslint/config
安装提示依次执行下来,生成eslint配置文件。以
.eslintrc.js
为例。一个基本的例子
module.exports = {
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
}
}
简单介绍几个属性的意义
env
一个环境定义了一组预定义的全局变量
常用的三个['browser', 'node', 'es2021']
其中es2021
可以根据需要配置
参考env
的 更多配置项extends
扩展规则集
扩展多个规则集使用数组
parserOptions
parserOptions.ecmaVersion: 启用对应esma版本对应的语法
parserOptions.sourceType: 代码是esm 就配置为module。
module.exports = {
"root": true,
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
}
}
这里加了一个
root: true
, 将 ESLint 限制到一个特定的项目, 停止在父级目录查找。配置支持React 安装对应插件
npm i eslint-plugin-react --save-dev
module.exports = {
"root": true,
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"jsx": true
},
"rules": {
}
}
extends
关键字扩展插件提供的规则集的语法是 plugin:name/type
,其中name是去掉 eslint-plugin-
前缀以后剩下的部分。这个这个语法是使用
eslint-plugin-xxx
的情况,我们也经常遇到形如 eslint-config-xxx
的包, 比如eslint-config-prettier
, eslint-config-airbnb
如何使用这种包提供的能力呢?{
"extends": [
"airbnb",
"prettier"
]
}
像上面这样忽略前缀
eslint-config-
,eslint会自动帮你匹配。eslint-plugin-xx 和 eslint-config-xx 区别
eslint-plugin-xx
是插件自己定义了一些规则,提供给用户使用,而eslint-config-xx
则不同,它是在已有规则上(包括eslint官方和第三方)上的二次配置。eslint规则是有3个等级的
"off"
或 0 - 关闭规则"warn"
或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)"error"
或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)而
eslint-config-xx
这种包就是主要通过改变规则的严苛程度(有的规则可能支持额外参数)来二次配置的。参考 eslint-config-prettier 源码
通过 plugin 启用自己想要单个或多个配置
eslint配置文件中还有一个
plugin
选项还没有使用。下边来说说它是干啥的。前边我们都是通过
extends
来扩展规则集,其实我们可以不使用它。比如前面提到的eslint-plugin-react
。{
"plugins": [
"react"
]
}
启用jsx支持
{
"parserOptions": {
"ecmaFeatures": {
"jsx": true
}
}
}
启用你想要的单个或多个规则
"rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
}
支持ts
先安装Typescript和
@typescript-eslint/parser
yarn add -D typescript @typescript-eslint/parser
npm i --save-dev typescript @typescript-eslint/parser
安装对应插件
yarn add -D @typescript-eslint/eslint-plugin
npm i --save-dev @typescript-eslint/eslint-plugin
重点:
@typescript-eslint/parser
& @typescript-eslint/eslint-plugin
这两个包的版本要保持一致更新配置文件
parser
指定为@typescript-eslint/parser
, @typescript-eslint
添加到plugins
数组,在rules
里配置你想要的规则。{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"rules": {
"@typescript-eslint/rule-name": "error"
}
}
你也可以启用所有推荐规则集合,将
plugin:@typescript-eslint/recommended
添加到extends
中{
"extends": ["plugin:@typescript-eslint/recommended"]
}
推荐的配置 你也可以把
eslint:recommended
配合此插件一起使用{
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"]
}
通过 rules 二次配置规则
比如
eqeqeq
eqeqeq
的默认级别是error。参考这里{
"rules": {
"eqeqeq": "warn"
}
}
由错误改为警告,此规则 还可以接受其他参数。参考这里
针对某个文件或者某类文件特殊化处理
{
"rules": {
"quotes": ["error", "double"]
},"overrides": [
{
"files": ["bin/*.js", "lib/*.js"],
"excludedFiles": "*.test.js",
"rules": {
"quotes": ["error", "single"]
}
}
]
}
.eslintignore配置文件 配置让eslint忽略的文件
配置方式参考
.gitignore
eslint 配合 prettier
首先我们要明白prettier作用,这里借用官方的描述
In other words, use Prettier for formatting and linters for catching bugs!更多内容参考这里
安装
npm i prettier eslint-config-prettier --save-dev
这里重点是 确保把
prettier
放在extends
数组的最后, 这样才可以覆盖前面与prettier冲突的配置。{
"extends": [
"some-other-config-you-use",
"prettier"
]
}
Note: You might find guides on the Internet saying you should also extend stuff like "prettier/react". Since version 8.0.0 of eslint-config-prettier, all you need to extend is "prettier"! That includes all plugins.prettier 配置文件 多种配置文件的格式(优先级按顺序排列)
- A "prettier" key in your package.json file.
- A .prettierrc file written in JSON or YAML.
- A .prettierrc.json, .prettierrc.yml, .prettierrc.yaml, or .prettierrc.json5 file.
- A .prettierrc.js, .prettierrc.cjs, prettier.config.js, or prettier.config.cjs file that exports an object using module.exports.
- A .prettierrc.toml file.
.prettierrc
{
"trailingComma": "es5",
"singleQuote": true,
"semi": true,
"jsxSingleQuote": true,
"endOfLine": "lf",
"printWidth": 120,
"tabWidth": 4,
"bracketSpacing": false,
"bracketSameLine": false,
"arrowParens": "avoid",
"singleAttributePerLine": true,
"overrides": [
{
"files": ".prettierrc",
"options": {
"parser": "json"
}
},
{
"files": "*.config.js",
"options": {
"parser": "babel"
}
}
]
}
fallback
如果老项目没有配置prettier,自己不想单独配置一个文件了,还想使用prettier来格式化,可以给vscode配一个降级方案,即项目有prettier配置,优先项目内的配置。
"prettier.useTabs" : true,
"prettier.tabWidth" : 4,
"prettier.printWidth" : 120,
"prettier.quoteProps" : "consistent",
"prettier.jsxSingleQuote" : true,
"prettier.singleQuote" : true,
"prettier.bracketSpacing": false,
"prettier.requirePragma": true,
"prettier.semi": false,
// Set the default
"editor.formatOnSave": false,
// Enable per-language
"[javascript]": {
"editor.formatOnSave": true
}
最后的配置是保存文件的时候自动格式化,可以根据需要来配置
附加
在搜索prettier和linter的时候,你可能会看到
eslint-plugin-prettier
这个包,这个不推荐,但是特定场景下很有用。【5分钟带你了解eslint配置及Prettier集成2022年最新版|5分钟带你了解eslint配置及Prettier集成2022年最新版 #eslint8】参考这里
它有几个弊端
- 编辑器里很多的红色波浪线,很烦人,prettier 的作用是让你忘记格式化这件事,而不是面对它
- 这比直接使用prettier要慢
- 可能会在间接层面导致问题
推荐阅读
- 了解听众,减少失误!
- 带你去看,国外顶级健身工作室的环境是啥样
- 【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置
- MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL
- 手摸手带你完成智慧路灯构建及避坑【华为云至简致远】
- 老杜带你学Ajax,轻松掌握ajax底层实现原理
- 国内首发可视化智能调优平台,小龙带你玩转KeenTune UI
- 想学自动化测试网课哪个好 学过的柠檬班网课建议了解下
- 想成为币圈竞猜高手,这份攻略了解下!
- golang详解|【Golang详解】深入了解map