前端代码 JS 格式处理 - ESlint

ESLint是一种用于识别和报告ECMAScript/JavaScript代码中发现的模式的工具,目的是使代码更加一致并避免bug。
使用 Espree 来将 JS 转化为 AST( abstract syntax tree,抽象语法树),进而根据规则分析词法和语法,并修复代码格式。

1、安装

# 安装

npm install eslint --save-dev

# or

yarn add eslint --dev

2、配置文件

2.1 配置类型

ESlint 的配置可以 在 package.json 中 eslintConfig 字段下 ,也可单独配置文件 .eslintrc.{js,cjs,yml,yaml,json}。
默认情况下,ESlint 会自动寻找配置文件或package.json 中的 eslintConfig 字段配置 。也可以在命令行手动指定配置文件。

也可以使用命令创建

# 创建 配置文件(项目必须有 package.json 文件)
npm init @eslint/config

# or

yarn create @eslint/config

.eslintrc.{js,cjs} 配置文件 需要 导出配置对象

module.exports = {
   "rules": {}
}

命令行手动指定配置文件

eslint -c myconfig.json myfiletotest.js

2.2 多个配置文件

一般情况下,一个配置文件(放在根目录下) 或 在 package.json 中配置,就能满足要求了。但有些复杂项目,可能需要多个配置,这就有优先级的问题了。
配置文件的优先级是根据被检查的 js 文件的位置计算的。优先级高的配置会覆盖优先级低的配置。

  • 优先级计算方式:
    • 1、ESlint 会从被检查的 JS 文件 所在目录开始,一级一级地向上父目录中 自动寻找配置,直到根目录 或 发现有配置项“ root: true ”的配置文件时停止。
    • 2、越靠近被检查的 JS 文件 的配置文件,优先级越高。所有配置都会被合并,如果配置冲突,优先级高的配置会覆盖优先级低的配置。
    • 3、同一目录下,同时有 .eslintrc 配置文件 和 package.json 配置,那么.eslintrc 配置优先,package.json 中的配置则不会生效。
      项目结构:
your-project
├── .eslintrc.json
├── lib
│ └── source.js
└─┬ tests
  ├── .eslintrc.json
  └── test.js

当然,除了配置文件,还有 行内配置,和命令行配置。
行内配置: 在代码行内的配置,类似注释,但会被 ESlint 解析;
命令行配置:在 执行 eslint 命令时 指定的配置。

// 优先级:  行内配置 > 命令行配置 > 配置文件的配置

// 行内配置

/*eslint-disable*/
/*eslint-enable*/
/*global*/
/*eslint*/
/*eslint-env*/


// 命令行配置
--global
--rule
--env
-c, --config

3、配置项

ESlint 的常用配置项:

{
 // 是否为根配置,默认 false 
   "root": true/false 

 // 运行环境,可配置多个。ESlint 会根据运行环境,检查代码语法
   "env":  {   
        "browser": true,
        "node": true,
        "es6": true,
        "commonjs": true
    }
  
  // 插件是 npm 包,为 ESlint 提供很多扩展
  // 插件可以执行许多功能,包括但不限于添加新规则和导出可共享配置。
  // 插件可以在 "extends", "rules", "env" 等配置项中使用
  // 在配置时,可以省略"eslint-plugin-" 这个包名前缀,eslint-plugin-react 

  "plugin": ["react"]


 // 扩展配置文件(继承配置),其值可以是: 配置文件的路径、可共享配置的名称。当有多个扩展文件,该项的值是字符串数组。
 // 可以认为 extends 字段后面的配置为 基础配置(父配置),而本配置为 子配置,即 子配置继承父配置,且是多继承。
 // 继承父配置文件的所有特性(包括规则、插件和语言选项)并修改所有选项。
 // 共享配置是:npm 的包(package),如:eslint-config-standard
 // 在配置时,可以省略"eslint-config-" 这个包名前缀
  "extends": "eslint:recommended",
  "extends": [
      "eslint:recommended",    // eslint 推荐的配置
      "eslint:all",    // ESlint 当前版本所有的配置(各个版本可能会不同,不推荐使用)
      "plugin:react/recommended", // 使用插件中 recommended 配置
      "standard",    // 共享配置
      "./node_modules/coding-standard/eslintDefaults.js", // 配置文件路径,相对于本配置文件的相对路径
   ]

 // 自定义配置,如果和 extends 中的配置项冲突,则会按一定规则覆盖
   "rules": {
       "react/no-set-state": "off"   // 设置插件中定义的规则
       ....
    },


    // 使用文件 全局正则 匹配 覆盖 规则配置
    // 文件路径是 相对于本配置文件的相对路径
    // overrides 中的规则配置 优先级高于本配置文件中的其他配置 。如果有多个 overrides ,后面的优先级更高。
    // overfides 中可以配置除了 "root" 和 "ignorePatterns" 之外的所有配置项
   "overrides": [
      {
        "files": ["bin/*.js", "lib/*.js"],   // 路径匹配
        "excludedFiles": "*.test.js",   // 排除特定文件
        "rules": {
          "quotes": ["error", "single"]
        }
      },
    ...
  ]
}
{
    "root": true,
    "env": {
        "browser": true,
        "node": true,
        "es6": 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
            }
        ]
    },
    "ignorePatterns": ["src/**/*.test.ts", "src/frontend/generated/*"]
}

https://eslint.org/

posted @ 2022-06-08 14:44  zhanglw  阅读(324)  评论(0编辑  收藏  举报