pre-commit钩子未执行的根本原因是git hook未正确安装或权限缺失,而非vscode配置;lint-staged匹配失败多因glob未覆盖文件类型(如缺tsx、vue),且格式化后需自动git add才能提交。

husky 和 lint-staged 的提交前拦截不依赖 VSCode 的 Node 环境配置,而是由 Git 钩子在 shell 中直接调用 npx 执行。VSCode 里装没装 Node、PATH 设没设对,不影响 git commit 触发的检查逻辑。
pre-commit 钩子为什么没执行?
根本原因不是 VSCode,而是 Git Hook 没被正确安装或权限缺失:
-
.husky/pre-commit文件必须存在且有可执行权限(macOS/Linux 下运行chmod +x .husky/pre-commit) - 项目根目录下没有
.git目录,或husky install没成功执行(可手动运行npx husky install) - 如果用了
pnpm,npx lint-staged可能找不到本地node_modules/.bin下的二进制,此时应在.husky/pre-commit开头加export PATH="./node_modules/.bin:$PATH" - Windows 用户若用 Git Bash,注意路径分隔符和换行符(CRLF 可能导致脚本解析失败)
lint-staged 配置匹配不到文件?
常见于 git add 后文件没被识别,本质是 glob 模式与暂存路径不一致:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
-
"*.{js,ts}"不会匹配src/index.tsx—— 必须显式加上tsx:"*.{js,ts,tsx}" -
vue文件需单独声明:"*.vue": ["eslint --fix", "prettier --write"],eslint默认不处理.vue - 路径是相对于 Git 暂存区的,不是当前工作目录;若在子目录执行
git commit,lint-staged仍以项目根为基准读取配置 - 配置写在
package.json里时,字段名必须是"lint-staged"(全小写),拼错就静默失效
格式化后文件没自动 git add?
这是最常被忽略的“断点”:没有 git add,修改就只是磁盘变更,不会进入本次提交。
-
lint-staged默认会在每个任务末尾自动执行git add,但前提是任务本身不报错、不中断 - 如果你写了
"*.js": ["eslint --fix"],而某文件eslint修复失败(比如语法错误),后续git add就不会触发 - 不要手动在配置里加
"git add"命令 ——lint-staged内置逻辑已包含,重复写反而可能因命令顺序出错 - 验证是否生效:改一个
.js文件 →git add→git commit→ 提交成功后立刻git status,看该文件是否仍在 “Changes to be committed” 区域
.husky/pre-commit 脚本能否稳定调起 npx lint-staged,以及 lint-staged 是否能准确识别暂存文件并完成闭环(修复 → 写入 → git add)。每一步都得实打实验证,不能只看控制台有没有输出。










