15

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

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

4

8 回答 8

8

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

于 2020-09-11T07:55:38.430 回答
4
  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库来 lint 暂存文件。如果您想在每次提交之前运行它并确保您的 repo 始终保持漂亮和 linted,这很有用。在此处
    阅读更多相关信息。

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

    eslint $(git diff --name-only HEAD HEAD~1 | grep -E '\.(js|jsx)$' | xargs)
    
于 2021-08-16T20:37:48.263 回答
3

也许您需要 ESLint 缓存?

https://eslint.org/docs/user-guide/command-line-interface#caching

于 2019-02-04T08:04:39.917 回答
2

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

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

我已经将它作为脚本添加到 package.json 中lint:git,现在我用yarn lint:git

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

于 2020-05-06T16:52:17.650 回答
1

以下命令对我来说非常方便:

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

它通过命令应用于输出eslint --fix的每一行。git diff --name-onlyxargs

于 2021-10-06T12:08:17.907 回答
0

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

此工具仅对已更改的行进行 lints:

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

于 2021-03-19T05:35:12.833 回答
0

类似于@ELCAPITANBETO 的反馈

我们可以做的

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

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

于 2020-06-11T23:49:49.860 回答
0

答案是:不要为所有文件全局运行 Eslint。我认为您想要的是防止将有问题的代码提交到存储库(当然,它已经存在,在引入 linting 之前提交,但是您想防止进行包含 eslint 错误的新提交)。
这意味着只在那些文件上运行 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 和其他一些检查(例如格式化为预提交钩子)是有意义的(即,每次您尝试提交时,这些检查都将被执行)这样您可以确保不会提交任何包含错误的代码。

于 2021-09-24T15:31:07.970 回答