仅对编辑过的文件启用 eslint

she*_*dtu 10 javascript eslint eslintrc

最近,我在我的一个项目中配置了 eslint。这个项目由数百个文件组成,一旦我配置了 eslint 就开始在所有文件中显示错误。

IMO,eslint遍历所有js文件,目前不需要。有什么方法可以限制 eslint 仅用于编辑过的文件?

Ray*_*eza 24

  1. 如果您想对暂存和编辑的文件进行 lint 检查,请使用:

    eslint $(git diff --name-only HEAD | grep -E '\.(js|jsx)$' | xargs)
    
    Run Code Online (Sandbox Code Playgroud)

    或者如果您想在终端中使用它,请使用yarn运行它:

    yarn run eslint $(git diff --name-only HEAD | grep -E '\.(js|jsx)$' | xargs)
    
    Run Code Online (Sandbox Code Playgroud)

    解释:

    • git diff --name-only HEAD: 编辑的文件名
    • grep -E '\.(js|jsx)$':过滤js和jsx文件。您可以在此处添加您的文件格式。
    • xargs:获取名称作为参数
  2. 您还可以使用lint-staged库来 lint 暂存文件。如果您想在每次提交之前运行它并确保您的存储库始终保持漂亮且整洁,那么它会很有用。在这里
    阅读更多相关信息。

  3. 如果您想检查最后提交的文件,请使用:

    eslint $(git diff --name-only HEAD HEAD~1 | grep -E '\.(js|jsx)$' | xargs)
    
    Run Code Online (Sandbox Code Playgroud)


Ton*_*ony 6

eslint --fix $(git diff --name-only HEAD | xargs)

  • 我使用了这个,但添加了一个“**/*.js”,以免它对诸如“docker-compose.yml”之类的东西进行检查:“eslint --fix $(git diff --name-only HEAD **/*. js | xargs)` (3认同)
  • 只是一个小注释,“**/*.j”应该在引号内:“eslint --fix $(git diff --name-onlydevelopment '**/*.js' | xargs)” (3认同)
  • @ArjunNayak要修复“未找到与模式“./src/DELETED.js”匹配的文件”,您可以将“--diff-filter=d”添加到 git diff 命令,如下所示:“eslint $(git diff - -name-only --diff-filter=d HEAD | xargs)`。这可能应该添加到答案中。 (3认同)
  • 当提交包含已删除的文件时面临问题`找不到与模式“app/views/home/MoEvents.js”匹配的文件。请检查模式中是否有打字错误。` (2认同)

Yar*_*rin 6

答案是:不要对所有文件全局运行 Eslint。我认为你想要的是阻止有问题的代码提交到存储库(当然,它已经存在,在引入 linting 之前提交,但你希望阻止包含eslint 错误的新提交)。
这意味着仅对那些已更改且即将提交到存储库的文件(即暂存文件)运行 Eslint 才有意义。有一个包可以做到这一点,lint-staged。在 package.json 中,添加如下配置:

"scripts": {
  "lint": "eslint --fix",
},
"lint-staged": {
  "*.{js,mjs,cjs,jsx,ts,tsx,vue}": [
     "npm run lint"
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后,当您运行时npm run lint-staged,只有暂存的文件才会作为参数传递给 lint 命令,因此只有那些文件才会被 linted。通常,将 lint-staged 与husky结合起来自动运行 linting 和其他一些检查是有意义的,例如作为预提交挂钩进行格式化(即每次尝试提交时都会执行这些检查)这样您就可以确保不会提交包含错误的代码。


小智 5

我正在使用它,它就像一个魅力

LIST=`git diff-index --name-only --diff-filter=d HEAD | grep .*\\.js | grep -v json`; if [ \"$LIST\" ]; then eslint --fix $LIST; fi
Run Code Online (Sandbox Code Playgroud)

我已将其作为名为 的脚本添加到 package.json 中lint:git,现在我使用以下命令执行它yarn lint:git

取自https://gist.github.com/oroce/11282380#gistcomment-2741146