eslint@8
-
eslint [options] file.js [file.js] [dir] --fix --ext .xx,.yy
-
配置文件
-
配置优先级(降序)
-
内联配置
-
/* eslint-disable */
、/* eslint-enable */
-
取消之后所有内容的eslint判断:
/* eslint-disable */
/* eslint-disable 规则名1[, 规则名2] */
-
开启之后所有内容的eslint判断:
/* eslint-enable */
/* eslint-enable 规则名1[, 规则名2] */
-
取消当前行的eslint判断:
/* eslint-disable-line */
或// eslint-disable-line
/* eslint-disable-line 规则名1[, 规则名2] */
或// eslint-disable-line 规则名1[, 规则名2]
-
取消下一行的eslint判断:
/* eslint-disable-next-line */
或// eslint-disable-next-line
/* eslint-disable-next-line 规则名1[, 规则名2] */
或// eslint-disable-next-line 规则名1[, 规则名2]
-
-
/* global */
-
/* eslint */
-
/* eslint-env */
-
-
命令行选项
--global
--rule
--env
-c/--config
(可配合--no-eslintrc
忽略所有规则默认查找)
-
项目级配置
会在每一个被检查文件的目录中寻找配置文件(不是
命令执行的目录,而是每一个被检查文件的目录,因此不同文件夹的文件都可能有不同的规则配置),并在其直系祖先目录中寻找,直到触发任意停止条件:抵达文件系统的根目录(/
)或 配置包含root: true
或 抵达当前用户的主目录(。~/
)-
同一级文件夹内的配置只会使用以下优先级最高的一个文件(降序):
- .eslintrc.js(输出一个配置对象)
- .eslintrc.cjs
- .eslintrc.yaml
- .eslintrc.yml
- .eslintrc.json(ESLint的JSON文件允许JavaScript风格的注释)
- package.json(在package.json里创建一个eslintConfig属性,在那里定义你的配置)
-
不同文件夹的规则嵌套覆盖。若未达到停止条件,会一直往上查找并合并配置,相同规则 以 越接近文件的(越先被搜索到的)优先。
-
-
-
忽略文件
.eslintignore
(不会包含.gitignore。指定其他文件作为eslint忽略文件:--ignore-path .gitignore
)忽略语法和.gitignore类似。
-
配置内容
-
root: true/false
是否不再向上搜索配置文件 -
extends: [ 配置名 或 plugin:缩写插件名/插件自定义的配置名 或 文件路径 ]
继承另一个配置文件的所有配置,extends后面的项优先级更高- 可以省略配置名称中的
eslint-config-
前缀,e.g.airbnb
会被解析为eslint-config-airbnb
。 - 可以是基于配置文件的绝对或相对路径。e.g.
"./node_modules/coding-standard/eslintDefaults.js"
、require.resolve('仓库名/导出的文件路径')
。 eslint:recommended
或eslint:all
。
- 可以省略配置名称中的
-
plugins: []
添加扩展功能的npm包-
可以省略包名中的
eslint-plugin-
前缀,e.g.react
是eslint-plugin-react
的缩写。 -
插件作用
- 自定义规则,以验证你的代码是否符合某个期望,以及如果不符合该期望该怎么做。
- 自定义配置。
- 自定义环境。
- 自定义处理器,从其他类型的文件中提取JS代码,或在提示前对代码进行预处理。
-
-
overrides: []
针对glob模式进行精细化配置,匹配的文件和规则优先级高于其他配置,overrides后面的项优先级更高- 必须包含
files
字段。 - glob在项目级配置中是相对于当前配置文件,在
--config
命令行配置中相对于命令执行目录。
- 必须包含
-
env: { 环境名 或 缩写插件名/插件自定义的环境名: true/false, }
是否开启环境提供预设的全局变量browser
、node
、commonjs
、shared-node-browser
、es6
、es2016~es2024
、worker
、amd
、mocha
、jasmine
、jest
、phantomjs
、protractor
、qunit
、jquery
、prototypejs
、shelljs
、meteor
、mongo
、applescript
、nashorn
、serviceworker
、atomtest
、embertest
、webextensions
、greasemonkey
-
globals: { 全局变量名: "writable或readonly或off" }
-
rules: { 规则名 或 缩写插件名/插件自定义的规则名: 值 或 [ 值, 额外选项 ] }
"off"===0,"warn"===1,"error"===2(触发时退出代码为1)
-
noInlineConfig: true/false
是否禁用所有内联配置注释 -
reportUnusedDisableDirectives: true/false
报告不需要的eslint-disable内置注释 -
parserOptions
指定解析器选项设置解析器选项有助于 ESLint 确定解析错误是什么。所有的语言选项默认为
false
。-
.ecmaVersion: 3~15或"latest"
指定要使用的ECMAScript语法的版本 -
.sourceType: "script或module"
-
.allowReserved: true/false
允许使用保留字作为标识符 -
.ecmaFeatures
想使用哪些额外的语言特性的对象.globalReturn: true/false
是否允许全局范围内的return语句.impliedStrict: true/false
是否启用全局严格模式.jsx: true/false
是否启用jsx
-
-
processor: 处理器名 或 缩写插件名/插件自定义的处理器名
-
parser: 解析器名
Esprima、@babel/eslint-parser、@typescript-eslint/parser
-
ignorePatterns
忽略文件- glob在项目级配置中是相对于当前配置文件,在
--config
命令行配置中相对于命令执行目录。 - 不能在
overrides
属性中使用ignorePatterns
。 - 优先级(降序):
.eslintignore
文件、ignorePatterns
配置、package.json
的eslintIgnore
- glob在项目级配置中是相对于当前配置文件,在
-
settings: {}
插件plugins使用来指定应该在其所有规则rules中共享的信息
-
-
-
CLI命令
prettier --write 「文件(夹)」 # 执行 prettier --check 「文件(夹)」 # 判断是否已经prettier
-
配置文件
-
项目级配置
会在每一个被检查文件的目录中寻找配置文件(不是
命令执行的目录,而是每一个被检查文件的目录,因此不同文件夹的文件都可能有不同的规则配置),并在其直系祖先目录中寻找,直到触发停止条件:抵达执行prettier命令的目录。-
同一级文件夹内的配置只会使用以下优先级最高的一个文件(降序):
-
优先级(降序)
package.json
:prettier
- JSON或YAML:
.prettierrc
.prettierrc.json
、.prettierrc.yml
、.prettierrc.yaml
、.prettierrc.json5
module.exports
:.prettierrc.js
、prettier.config.js
export default
:.prettierrc.mjs
、prettier.config.mjs
.prettierrc.toml
- 配置简单,导出对象,没有config概念,分享使用通过导出对象进行。
-
-
不同文件夹的规则嵌套覆盖。若未达到停止条件,会一直往上查找并合并配置,相同规则 以 越接近文件的(越先被搜索到的)优先。
-
-
忽略文件
.prettierignore
(prettier@3会默认加上.gitignore
的内容;prettier@2
不会)忽略语法和.gitignore一致。
-
配置规则
-
-
不对接下来的语句块进行prettier
# JS // prettier-ignore # JSX {/* prettier-ignore */} # HTML <!-- prettier-ignore --> <!-- prettier-ignore-attribute --> <!-- prettier-ignore-attribute (mouseup) --> # CSS /* prettier-ignore */ # markdown <!-- prettier-ignore --> <!-- prettier-ignore-start --> 内容范围 <!-- prettier-ignore-end --> # YAML # prettier-ignore # GraphQL # prettier-ignore # Handlebars {{! prettier-ignore }}
-
配置内容
-
配置逻辑和eslint类似
- 没有嵌套逻辑,以第一个搜索到的配置文件为准。若cli添加
-c/--config 配置路径
,则规则仅以设置的配置路径为准(类似eslint的-c 配置路径 --no-eslintrc
)。 - 没有
配置(或可理解为root
root
含义永远为true
),每个文件仅会有一个配置。
- 没有嵌套逻辑,以第一个搜索到的配置文件为准。若cli添加
-
extends: [ 配置名 或 文件路径 ]
配置。
-
overrides
覆盖,必须包含
files
。
-
-
忽略文件
.stylelintignore
(不会包含.gitignore)忽略语法和.gitignore一致。
-
区别:
- ESLint(包括其他一些 lint 工具)的主要功能包含:代码格式的校验 + 代码质量的校验。
- Prettier:只是代码格式的校验(并格式化代码),不会对
代码质量进行校验。
- 代码格式问题通常指的是:单行代码长度、tab长度、空格、逗号表达式等问题。
- 代码质量问题指的是:未使用变量、三等号、全局变量声明等问题。
-
配合使用:
- 通过
eslint
命令,使用prettier
+eslint
功能:eslint-plugin-prettier(使用eslint的忽略文件;可以在eslint的配置文件中配置prettier配置规则;可以完全不添加prettier配置文件和忽略文件)。 - 使用
husky
/simple-git-hooks
+lint-staged
,针对git的staged文件,在git hooks时期,进行lints操作(如:eslint、prettier、等)。
demo。
- 通过