在暂存文件上运行 eslint “ONLY”

Pra*_*eek 11 pre-commit-hook eslint husky eslint-config-airbnb lint-staged

我正在尝试使用预提交钩子在提交之前检测 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"
  }
Run Code Online (Sandbox Code Playgroud)
"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
Run Code Online (Sandbox Code Playgroud)
"lint-staged": {
    "*.js": [
      "npm run precommit"
    ],
    "*.jsx": [
      "npm run precommit"
    ]
  }
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使它仅适用于暂存文件而不适用于目录中存在的其他文件?

Dev*_*ode 6

使用 husky v7/lint-staged v11.2.0 - 暂存文件将简单地添加到命令末尾,并用空格分隔。如果您有一个.husky/pre-commit调用 的文件npx lint-staged,那么您就有一个 lint 阶段的配置,如下所示:

{
  '*.js': [
    'eslint'
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后修改 src/foo.js 和 src/bar.js,将运行的命令是:

eslint src/foo.js src/bar.js
Run Code Online (Sandbox Code Playgroud)

无论您的 lint 阶段配置中包含什么命令,都没有关系。文件只是添加到命令末尾,并用空格分隔。

这些文件将传递给您的test:ci命令,但不会传递给您的 lint 子命令。

你可以用 bash 函数包装...像这样:

eslint src/foo.js src/bar.js
Run Code Online (Sandbox Code Playgroud)

这是在我的手机上写的,我几乎不懂 bash,所以语法可能是错误的

  • 好的@Devin,但是解决方案是什么? (4认同)

jon*_*ode -5

"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    },
},
"lint-staged": {
    "*.js": [
        "eslint src/**/*.{js}",
        "cross-env CI=true react-scripts test --bail --passWithNoTests",
        "git add"
    ]
},
Run Code Online (Sandbox Code Playgroud)

  • 如果这有效,则需要一些关于“eslint src/**/*.{js}”如何仅 lint _staged_ 文件的解释。我看不出有什么办法可以发挥作用。 (10认同)