husky+lint-staged 在非暂存文件上运行
Posted
技术标签:
【中文标题】husky+lint-staged 在非暂存文件上运行【英文标题】:husky+lint-staged runs on unstaged files 【发布时间】:2019-12-19 16:38:20 【问题描述】:我正在尝试添加一个预提交 git 钩子,它将仅在触摸(暂存)文件上运行我的 linter。我的项目基于 Create React App。
我在package.json
中添加了以下内容:
"scripts":
"lint": "eslint 'src/**/*.js'",
"lintfix": "eslint 'src/**/*.js' --fix"
,
"husky":
"hooks":
"pre-commit": "lint-staged"
,
"lint-staged":
"*": ["npm run lintfix --", "git add"]
我在 "*"
上运行它的原因是因为我希望脚本本身 (lintfix) 强制执行它的配置 (src/**/*.js
)。
问题是我在整个代码库上都遇到了很多 eslint 错误,而不仅仅是我希望的暂存文件。
仅在暂存文件上运行我的 eslint 需要什么配置?
【问题讨论】:
【参考方案1】:来自 lint-staged readme.md:
"*": "your-cmd"
此配置将使用当前暂存的列表执行
your-cmd
作为参数传递的文件。所以,考虑到你做了 git add file1.ext file2.ext,lint-staged 将 运行以下命令:
your-cmd file1.ext file2.ext
所以查看您的 package.json,您正在运行以下内容:
eslint 'src/**/*.js' --fix file1.js file2.js file3.js fileX.js... ....
您需要将 npm run lintfix --
替换为 eslint --fix
以首先测试它是否有效(它应该),然后在没有通用 src/**/*.js
正则表达式的情况下调整您的 lintfix
命令。
【讨论】:
我的 eslint 配置运行起来更漂亮,运行 lint-staged 时它会在所有文件上运行,而不仅仅是暂存文件。以上是关于husky+lint-staged 在非暂存文件上运行的主要内容,如果未能解决你的问题,请参考以下文章
Husky/lint-staged 是不是可以排除/忽略文件?
代码提交规范 husky + commitlint + lint-staged