pre-commit钩子在VSCode中不执行,主因是git.enableSmartCommit=true绕过钩子、.husky/pre-commit缺执行权限或不存在、lint-staged未配置git add导致修复未暂存;需关闭smart commit、chmod +x钩子文件、并在lint-staged命令末尾添加git add。

pre-commit 钩子在 VSCode 里不跑,不是 Git 坏了,而是 Node 环境、权限、VSCode 提交逻辑三者没对齐。核心问题从来不是“怎么配”,而是“哪一环断了”。
VSCode 点提交按钮没反应?先关掉 git.enableSmartCommit
这个设置默认为 true,它会让 VSCode 绕过 Git 原生钩子,直接把未暂存的修改塞进 commit。结果就是:终端里 git commit 能触发 lint,VSCode 点 ✔️ 却秒成功、零校验。
解决方法只有一条路:
- 打开 VSCode 设置(
Cmd+,或Ctrl+,) - 搜索
git.enableSmartCommit - 设为
false
之后必须手动 git add 再点提交,pre-commit 才会真正被调用。
.husky/pre-commit 权限不对或根本不存在
husky 安装后不会自动创建可执行钩子文件,尤其 macOS/Linux 下缺 chmod +x 就等于没装。
检查和修复步骤:
- 运行
npx husky install(确保.husky/目录生成) - 确认
.husky/pre-commit文件存在且内容非空 - 执行
chmod +x .husky/pre-commit(Windows 可跳过,但 WSL 需要) - 如果项目根目录没有
package.json,或者lint-staged没装在devDependencies里,npx lint-staged会直接报错找不到命令
VSCode 终端没加载 nvm 或 Node 路径,导致 hook 执行失败
VSCode 启动时可能没读取 shell 配置(比如 ~/.zshrc),nvm 切换的 Node 版本对 Task 和 Git Hook 不可见。现象是:pre-commit 脚本里 node 命令找不到,或版本错乱。
火山引擎数字人视频生成技能。用户上传照片并提供对白或配音文案后,系统自动完成形象创建、TTS配音(性别检测与多音色匹配)及视频合成,并将结果返回。触发词:数字人、视频合成、口播视频、数字人视频。
稳妥做法是显式指定 Node 路径:
"command": "${env:HOME}/.nvm/versions/node/v18.18.2/bin/node ./node_modules/.bin/husky-run pre-commit"
注意替换为你本地实际 Node 路径(可用 which node 查);Windows 用户路径格式不同,需用 C:\Program Files\nodejs\node.exe 类似写法。
lint-staged 配置漏掉 git add,修复白做
eslint --fix 和 prettier --write 默认只改工作区文件,不自动 git add。如果你配置里没写这句,那修复后的代码根本没进暂存区——你提交的还是旧内容,CI 依然报错。
正确写法示例(顺序不能颠倒):
"*.{js,ts}": ["eslint --fix", "prettier --write", "git add"]
另外,eslint.autoFixOnSave 和 pre-commit 一起开容易打架:保存时修一次,提交前又修一次,工作区和暂存区内容不一致。建议关掉 eslint.autoFixOnSave,让所有格式化统一走 lint-staged。
.husky/pre-commit 是否被 Git 加载、Node 是否能被它找到、暂存区文件是否真被 lint-staged 拿到——这三个环节,少一个,校验就失效。

















