阅读时长 3 分钟

ESLint 配置流程

目录

eslint-flow 仓库

leylatop/eslint-flow

设计配置与技术实现

以下操作基于代码仓库实现。

安装 ESLint

ESLint 负责代码质量检查和发现潜在错误。

使用官方的初始化命令,在项目根目录下运行:

npm init @eslint/config@latest

在安装过程中,ESLint 会通过一系列的问题,帮助用户生成基础配置。

完成和 ESLint 的问题后,会自动安装 ESLint 所需的 npm 包(如 eslinteslint-plugin-react 等),并自动生成一个 eslint.config.js(老的版本叫 .eslintrc.js)。

根据项目需求,修改 eslint.config.js 的 rule 使 lint 发生变化。

常见 rule

rules: {
  'quotes': ['error', 'single'], // 使用单引号
  'semi': [2, 'never'], // 禁用分号结尾
  'comma-spacing': ['error', { before: false, after: true }], // 逗号后面添加空格,前面不加空格
  'arrow-spacing': ['error', { before: true, after: true }], // 箭头函数前面添加空格,后面添加空格
  'camelcase': ['error', { properties: 'never', ignoreDestructuring: false }], // 强制使用驼峰命名
  'eqeqeq': ['error', 'always', { null: 'ignore' }], // 强制使用全等运算符
  'comma-dangle': ['error', { arrays: 'never', objects: 'never', imports: 'never', exports: 'never', functions: 'never' }], // 禁止在数组、对象、导入、导出、函数后面添加逗号
  'indent': ['error', 2, { // 强制使用 2 个空格缩进
    SwitchCase: 1, // switch 语句后面添加空格
    VariableDeclarator: 1, // 变量声明后面添加空格
    outerIIFEBody: 1, // 外层 IIFE 体后面添加空格
    MemberExpression: 1, // 成员表达式后面添加空格
    FunctionDeclaration: { parameters: 1, body: 1 }, // 函数声明后面添加 1 个空格
    FunctionExpression: { parameters: 1, body: 1 }, // 函数表达式后面添加 1 个空格
    CallExpression: { arguments: 1 }, // 调用表达式后面添加 1 个空格
    ArrayExpression: 1, // 数组表达式后面添加 1 个空格
    ObjectExpression: 1, // 对象表达式后面添加 1 个空格
    ImportDeclaration: 1, // 导入声明后面添加 1 个空格
    flatTernaryExpressions: false, // 扁平三元表达式后面添加 1 个空格
    ignoreComments: false // 忽略注释
  }],
  'key-spacing': ['error', { beforeColon: false, afterColon: true }], // 强制使用冒号后面添加空格,前面不加空格
  'keyword-spacing': ['error', { before: true, after: true }], // 强制使用关键字后面添加空格,前面不加空格
}

集成到开发流程

在编辑器中安装 ESLint 插件

在 VS Code 的扩展商店中搜索并安装 ESLint 插件,这样在编码过程中,有触发 lint 限制,编辑器会报红提醒。

如需每次保存文件时,使用 ESLint 进行自动修复,可以在 VSCode 中配置 settings.json:

{
  // .vscode/settings.json
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll": "explicit",
    "source.fixAll.eslint": "explicit"
  }
}

在 package.json 增加 lint 检测

package.jsonscripts 中添加命令,方便手动检查整个项目。

(也可以在 CI/CD 打包过程中加入 npm run lint 的检测)

{
  "scripts": {
    // ... 其他脚本
    "lint": "eslint . --ext .js,.jsx,.ts,.tsx"
  }
}

在 git 提交过程中增加 lint 检测

为了从源头杜绝不规范的代码被提交到仓库,可以使用 huskylint-staged 在提交代码前自动进行检查。

安装 huskylint-staged 依赖:

npm install --save-dev husky lint-staged

配置 huskylint-staged

  1. 运行 npx husky init 来初始化 husky,此步骤自动生成 .husky/pre-commit 文件,并且在 package.jsonscripts 中新增 "prepare": "husky"
  2. package.json 中添加 lint-staged 配置:
// package.json
{
  // ... 其他配置
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint"
    ]
  }
}
  1. 编辑生成的 .husky/pre-commit 文件,确保其内容为:
#!/bin/sh

npx lint-staged

现在,每当尝试 git commit 时,lint-staged 会自动对您本次修改并暂存(staged)的文件运行 eslint。如果有错误,提交将会被阻止。

常见问题

编辑器未按照 ESLint 规则进行检测和报错

问题描述:

已经在仓库中安装 ESLint 相关依赖,并在仓库根目录下存在 eslint.config.js.eslintrc.js 配置文件。在编辑器修改代码后,编辑器未按照 ESLint 规则进行检测和报错。

解决方案:

  1. 检查编辑器是否安装 VSCode 插件,如果未安装,则自行安装
  2. 检查根目录下是 eslint.config.js 还是 .eslintrc.js
    • 如果是 .eslintrc.js,则需要在根目录下创建 .vscode/settings.json 文件,告诉编辑器要使用 .eslintrc.js
    • 如果不配置 settings.json,就需要将 .eslintrc.js 升级成 eslint.config.js
{
  "eslint.useFlatConfig": false // 使用 ESLint 的'传统'配置系统(.eslintrc.js),而不是'扁平化'的新配置系统(eslint.config.js)
}