【问题标题】:Enable eslint only for edited files仅对已编辑的文件启用 eslint
【发布时间】:2019-06-27 21:36:05
【问题描述】:

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

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

【问题讨论】:

  • “编辑过的文件”是什么意思?我的意思是,例如,您运行 lint,它应该检查哪些文件...?
  • 假设有 100 个文件,其中可能包含 eslint 错误/警告,但我希望 eslint 仅跟踪更改的文件。

标签: javascript eslint eslintrc


【解决方案1】:

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

【讨论】:

  • 我使用了这个,但添加了一个 **/*.js 以不让它像 docker-compose.yml 之类的东西掉毛:eslint --fix $(git diff --name-only HEAD **/*.js | xargs)
  • 只是一个小评论,**/*.j 应该在引号内:eslint --fix $(git diff --name-only develop '**/*.js' | xargs)
【解决方案2】:
  1. 如果您想对暂存和编辑的文件进行 lint,请使用:

    eslint $(git diff --name-only HEAD | grep -E '\.(js|jsx)$' | xargs)
    

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

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

    解释:

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

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

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

【讨论】:

    【解决方案3】:

    【讨论】:

    • 这可以隔离其他目​​录以进行验证,但我只想跟踪更改的文件。
    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      下面的命令对我来说很方便:

      git diff --name-only | xargs eslint --fix
      

      它通过xargs 命令为git diff --name-only 输出的每一行应用eslint --fix

      【讨论】:

        【解决方案6】:

        类似于@ELCAPITANBETO 的反馈

        我们可以的

        eslint -c eslintrc.js $(git diff --name-only --diff-filter=ACMRTUXB master | grep -E \"(.js$|.ts$|.tsx$)\")

        https://gist.github.com/seeliang/0f0de424d1cdc4541c338f4ee93b7e6a

        【讨论】:

          【解决方案7】:

          对于较大的文件,执行包含数千行更改的拉取请求是不切实际的,您可以使用lint-diff

          此工具只是对更改的行进行 lints:

          https://github.com/grvcoelho/lint-diff

          【讨论】:

            【解决方案8】:

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

            "scripts": {
              "lint": "eslint --fix",
            },
            "lint-staged": {
              "*.{js,mjs,cjs,jsx,ts,tsx,vue}": [
                 "npm run lint"
              ]
            }
            

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

            【讨论】:

            • 您提供了解决方案的参考,但没有提供如何使用这些解决方案来解决 OP 的问题。建议添加一些关于您的答案将如何解决 OP 问题的解释。
            • @gangula 同意,我添加了解释。
            猜你喜欢
            • 2016-10-15
            • 2017-08-12
            • 2020-08-14
            • 2020-05-11
            • 1970-01-01
            • 2016-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多