我在
packageA
中有两个 JavaScript 文件,我知道它们存在 lint 错误。我修复并上演了一个。当我尝试提交暂存文件时,由于未修复/未暂存文件而失败。
我有一个结构如下的单一存储库:
.lintstagedrc.mjs
|...packages
|...packageA
.lintstagedrc.mjs
|...components
compA
compB
|...packageB
.lintstagedrc.mjs
|...packageC
.lintstagedrc.mjs
根
.lintstagedrc.mjs
是
export default {
'*.js': 'eslint --fix'
};
每个包裹的
.lintstagedrc.mjs
是
export default {
'*.js': 'yarn lint:js',
'*.hbs': 'yarn lint:hbs'
};
每个包裹的
package.json
有:
"scripts": {
"lint:js": "eslint . --cache",
"lint:hbs": "handlebars-lint ."
我使用 Husky 来运行 lint-staged。它是通过
.husky/pre-commit
配置的,它具有:
npx lint-staged
如果我在调试模式下运行 lint-staged,我会看到:
lint-staged:generateTasks Generating linter tasks +0ms
lint-staged:generateTasks Generated task:
lint-staged:generateTasks {
lint-staged:generateTasks pattern: '*.js',
lint-staged:generateTasks commands: 'yarn lint:js',
lint-staged:generateTasks fileList: [
lint-staged:generateTasks '/myapp/packages/packageA/components/compA.js'
lint-staged:generateTasks ]
lint-staged:generateTasks } +1ms
lint-staged:generateTasks Generated task:
lint-staged:generateTasks { pattern: '*.hbs', commands: 'yarn lint:hbs', fileList: [] } +0ms
这看起来就像我所期望的那样。一个 JS 文件,还有一个 HBS 文件。
然后备份原始状态,并运行暂存文件的任务。
[STARTED] Running tasks for staged files...
[STARTED] packages/packageA/.lintstagedrc.mjs — 1 file
[STARTED] *.js — 1 file
[STARTED] *.hbs — 0 files
[SKIPPED] *.hbs — no files
[STARTED] yarn lint:js
[FAILED] yarn lint:js [FAILED]
我认为问题在于附加到
yarn lint:js
的暂存文件列表被忽略,因为该脚本是 eslint . --cache
。
如果我可以更新纱线脚本来处理传入的文件,或者默认为
.
,我希望它。我尝试使用 bash 和命令 eslint ${@:-.} --cache
,但这不起作用。
我假设我可以更新我的
.lintstagedrc.mjs
以直接调用eslint
,但我真的很想通过yarn来调用它。这样,如果我们将来改变 linting 的方式,则只需更改一个地方 (package.json
)。
我使用了以下 Yarn 脚本,这似乎提供了所需的结果:
"lint:js": "sh -c 'eslint --cache ${@:-.}' --"
这允许我从 lint-staged 运行
lint:js
,它只对暂存的文件进行 lint,我还可以手动运行 yarn lint:js
,它对所有 JS 文件进行 lint。