lint-staged 不仅仅对暂存文件进行 linting

问题描述 投票:0回答:1

问题

我在

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
)。

bash lint-staged yarnpkg-v3
1个回答
0
投票

我使用了以下 Yarn 脚本,这似乎提供了所需的结果:

"lint:js": "sh -c 'eslint --cache ${@:-.}' --"

这允许我从 lint-staged 运行

lint:js
,它只对暂存的文件进行 lint,我还可以手动运行
yarn lint:js
,它对所有 JS 文件进行 lint。

© www.soinside.com 2019 - 2024. All rights reserved.