【问题标题】:Run eslint "ONLY" on the staged files在暂存文件上运行 eslint "ONLY"
【发布时间】:2020-10-07 01:30:13
【问题描述】:

我正在尝试使用预提交挂钩在提交发生之前检测 eslint 错误。我正在使用 husky 和 ​​lint-staged。但它对 src 中的所有文件运行 lint 命令,而不是仅对暂存文件运行。这是我的 package.json 文件。

"scripts": {
    "test:ci": "cross-env CI=true react-scripts test --bail --passWithNoTests",
    "lint": "eslint src/**/*.{js,jsx}",
    "lint:fix": "eslint . --fix",
    "precommit": "npm run lint && npm run test:ci"
  }
"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
"lint-staged": {
    "*.js": [
      "npm run precommit"
    ],
    "*.jsx": [
      "npm run precommit"
    ]
  }

有什么办法让它只适用于暂存文件而不适用于目录中存在的其他文件?

【问题讨论】:

    标签: eslint pre-commit-hook eslint-config-airbnb husky lint-staged


    【解决方案1】:
    "husky": {
        "hooks": {
          "pre-commit": "lint-staged"
        },
    },
    "lint-staged": {
        "*.js": [
            "eslint src/**/*.{js}",
            "cross-env CI=true react-scripts test --bail --passWithNoTests",
            "git add"
        ]
    },
    

    【讨论】:

    • 如果可行,则需要对 如何 eslint src/**/*.{js} 仅对 staged 文件进行 lint 进行一些解释。我看不出它有任何工作方式。
    【解决方案2】:

    根据lint-staged example,我实现了为了只检查暂存文件(大约需要 5 秒),除非有超过 5 个暂存文件,它会检查所有 repo(可能需要超过 1 分钟):

    1. 升级lint-staged包到最新版本
    2. 在您的存储库的根目录中添加一个.lintstagedrc.js 文件。它可能包含如下内容:
    module.exports = {
      '**/*.js?(x)': (filenames) =>
        filenames.length > 5 ? 'eslint --ext .js,.jsx . --ignore-path .gitignore --fix .' : `eslint ${filenames.join(' ')} --fix`,
      "*.json": [
        "prettier --write"
      ]
    }
    
    1. package.json 文件中删除旧的“lint-staged”命令

    【讨论】:

      【解决方案3】:

      使用 husky v7/lint-staged v11.2.0 - 暂存文件将简单地添加到命令的末尾,以空格分隔。如果你有一个调用npx lint-staged.husky/pre-commit 文件,然后你有一个这样的lint-staged 配置:

      {
        '*.js': [
          'eslint'
        ]
      }
      

      而你修改了 src/foo.js 和 src/bar.js,将会运行的命令是:

      eslint src/foo.js src/bar.js
      

      不管您在 lint-staged 配置中使用什么命令。文件只是添加到命令末尾,用空格分隔。

      【讨论】:

      • 我的另一个问题是,如何获取在两次 git 提交之间修改的所有 .js/ts/tsx/jsx 文件的列表,但这将在不同的线程中。跨度>
      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2015-08-25
      • 2017-04-24
      • 1970-01-01
      • 2020-11-12
      • 2018-11-27
      • 2019-12-10
      • 2019-09-15
      相关资源
      最近更新 更多