我需要一种方法来仅在分支上已更改的代码行或块上运行 ESLint。我们的想法是,我们有一个庞大的旧代码库,并且我们希望至少向前执行 ESLint 规则。 我在 CI 中实现了它,对 PR 中更改的所有文件进行了检查。但是人们正在接触文件中的一行,突然他们必须修复 77 个 ESLint 错误。
就我个人而言,我一点也不担心他们,但他们比我更大更强,我想我需要在这里迈出一些小步伐。
因此我可以获得特定分支更改的所有文件的列表。我怀疑我可以做一个 diff 并解析它并提取所有更改的行号,然后运行 ESLint 并按行号过滤结果,但这听起来像是一个巨大的痛苦。
我的问题是没有更好的实际方法来做到这一点吗?我不是第一个需要这个的人。
需要澄清的是,我理解这个“要求”严格适用于像我这样的边缘情况,在这种情况下,整个文件更改的负担太大了。这不是最佳的。这是次优的,但如果我不这样做,我就什么也得不到,所以我必须选择我的战斗。
:在提交之前仅检查已更改的行,而不是检查暂存文件。 为了实现这一点,我们应该使用
Husky(预提交钩子)、lint-staged 和一个名为 eslint-plugin-diff; 的特殊依赖项 这里的流程是:当你准备提交时,husky 将被触发,这将触发 lint-staged,它负责提取所有暂存的文件并在文件上运行 eslint。
我们必须配置 eslint 才能使其仅对提交中已更改的行进行 lint 检测。
执行此操作的步骤如下:
i)按照正常方式配置 husky 和 lint-staged
ii)您将拥有 .eslintrc 文件,您必须创建另一个文件“.eslint.husky.js”(在根目录中)
iii) 将
.eslintrc
中的所有代码复制到
.eslint.husky.js
文件iv) 在 .eslint.husky.js
文件中,在 extends 部分添加
"plugin:diff/diff"(必须添加依赖项:
eslint-plugin-diff
)
参考:https://www.npmjs.com/package/eslint-plugin-diffv)这是您要做的主要步骤,配置 lint-staged 后,您将拥有
.lintstagedrc
文件。在该文件中,您必须配置应使用
.eslint.husky.js
中的配置进行 linting 的文件
该文件应该看起来像{
"**/*.{js,jsx,scss,}": ["eslint --config .eslintrc.husky.js"]
}
现在一切就绪,您可以提交并检查结果。 你可以问“为什么我要创建一个新文件并将“plugin:diff/diff”添加到扩展部分,我可以直接在
.eslintrc
文件中执行该操作”。
是的,你可以这样做,但所有的 linter 都被禁用,编辑器上不会出现错误,但它会在提交期间显示错误...仅此而已,希望有帮助🐇