@Dale-Lin
2022-09-12T15:11:19.000000Z
字数 2706
阅读 337
ESLint
环境 Node.js >=16.0.0 需要 SSL 支持,在 repository 下运行:
npm init @eslint/config
用 ESLint 检查某个文件:
# 有 eslint 问题会抛出错误
pn eslint yourfile.js
# 尝试自动修复
pn eslint yourfile.js --fix
npm init @eslint/config
会在项目目录下生成 .eslintrc.js
文件,例如:
module.exports = {
"extends": [
"eslint:recommended"
],
"rules": {
"semi": 2,
"quotes": 2,
}
}
extends 的 devDep 包命名为
eslint-config-yourConfig
的时候,可以用"yourConfig"
env
提供了预设的全局变量:
es2016
~es2022
:ES7~ES13require()
和 define()
globals
配置可以自定义全局变量:
{
"env": {
"es6": true,
"browser": true
},
"globals": {
"Promise": "off", // off-禁用
"var1": "writable", // 可用
"var2": "readonly" // 只读
}
}
react 建议使用
eslint-plugin-react
插件。
off
/0
:关闭warn
/1
:warning,不影响 exit codeerror
/2
:error,exit code 为 1
// .eslintrc.js
{
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["error", "double"]
}
}
使用 "plugin/rule"
来使用一个插件的规则:
{
"plugins": [
"plugin1"
],
"rules": {
"eqeqeq": "off",
"curly": "error",
"quotes": ["error", "double"],
"plugin1/rule1": "error"
}
}
使用 "overrides"
配置来覆盖另一个文件的规则:
{
"rules": {...},
"overrides": [
{
"files": ["*-test.js", "*.spec.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
禁止使用注释禁用:
{
"rules": {...},
"noInlineConfig": true
}
提示无用的注释禁用规则:
{
"rules": {...},
"reportUnusedDisableDirectives": true
}
ESLint 默认使用 Espree 作为 parser,可以通过 "parser"
字段指定自定义 parser:
{
"parser": "@typescript-eslint/parser",
"rules": {
"semi": "error"
}
}
能用的 ESLint parser:
插件可能提供了 processor,Processor 可以从其他类型的文件里提取 js 给 ESLint 检查,或者预处理 js 代码。
使用 "processor"
字段配置,通常格式是 "{plugin}/{processor}"
:
{
"plugins": ["a-plugin"],
"processor": "a-plugin/a-processor"
}
"overrides"
字段里可以指定 processor 处理的文件类型:
{
"plugins": ["a-plugin"],
"overrides": [
{
"files": ["*.md"],
// "files": ["**/*.md/*.js"]
// 只检查 md 文件里的 js 代码块
"processor": "a-plugin/markdown"
}
]
}
插件是第三方的,通常使用 npm 安装。使用 "plugins"
字段配置, "eslint-plugin-"
前缀可以省略:
{
"plugins": [
"plugin1", // eslint-plugin-plugin1
"eslint-plugin-plugin2",
"@jquery/jquery", // @jquery/eslint-plugin-jquery
"@foobar" // @foobar/eslint-plugin
]
}
注意:
require('eslint-plugin-pluginname')
获取;"extends"
加载的 plugins 也会从 node_modules 目录下查找使用插件定义的配置(rules, env)时遵循以下 convention(约定):
{
// ...
"plugins": [
"jquery", // eslint-plugin-jquery
"@foo/foo", // @foo/eslint-plugin-foo
"@bar" // @bar/eslint-plugin
],
"extends": [
"plugin:@foo/foo/recommended",
"plugin:@bar/recommended"
],
"rules": {
"jquery/a-rule": "error",
"@foo/foo/some-rule": "error",
"@bar/another-rule": "error"
},
"env": {
"jquery/jquery": true,
"@foo/foo/env-foo": true,
"@bar/env-bar": true,
}
// ...
}
使用 "ignorePatterns"
字段设置 ESLint 忽略的文件:
{
"ignorePatterns": ["templ.js", "**/vendor/*.js"],
"rules": {
// ...
}
}