lint-staged 只检查暂存区文件吗?为什么我改了没 add 的文件也被格式化了?

Top丶子墨 阅读 4

我刚配置了 lint-staged + husky,想只对 git add 过的文件做 eslint 和 prettier 检查。但奇怪的是,我改了一个还没 add 的文件,提交时它居然也被格式化了!

我的配置是这样的:

{
  "lint-staged": {
    "*.{js,jsx,ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}

按理说 lint-staged 应该只处理 staged 文件才对啊?是不是我哪里理解错了?还是配置有问题?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
林莹(打工版)
看起来问题出在 husky 和 lint-staged 的配置上。默认情况下,lint-staged 确实只处理 staged 文件,但如果整个 git hook 被触发了,它可能会对所有文件生效。

先检查一下你的 .husky/pre-commit 钩子文件内容。确保它只调用了 lint-staged,而不是直接执行 eslint 或 prettier。常见的错误是同时添加了其他格式化命令。

可以优化成这样:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged


另外建议给 lint-staged 配置加上明确的扩展名限制和路径:

{
"lint-staged": {
"{src,test}/**/*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}


这能避免意外格式化到不该处理的文件。记得运行 npx husky install 来更新钩子配置。要是还有问题,试着删掉 node_modules/.cache/lint-staged 再重试。有时候缓存也会捣乱。
点赞
2026-03-30 06:07