Nx仓库升级husky@8/lint-staged@13后自定义命令异常咨询
解决Nx仓库husky 8.x + lint-staged 13.x配置问题及版本选择建议
一、正确配置步骤(还原旧版本行为)
1. 重新安装依赖
先清理旧版本残留,再安装新版:
npm uninstall husky lint-staged npm install husky lint-staged --save-dev
2. 初始化husky钩子机制
启用husky并添加prepare脚本(确保项目克隆后自动初始化钩子):
npx husky install npm set-script prepare "husky install"
3. 添加pre-commit钩子
创建pre-commit钩子,让它调用lint-staged:
npx husky add .husky/pre-commit "npx lint-staged"
4. 配置lint-staged(关键:适配Nx的lint命令)
在package.json中添加lint-staged配置,确保命令能接收lint-staged传递的文件列表,并且自动提交修复后的文件:
"lint-staged": { "*.{ts,html,scss}": [ "npm run lint:fix", "git add" ] }
同时修改你的lint:fix脚本,让它支持处理指定文件(Nx的ng lint需要通过--files参数接收文件列表):
"scripts": { "lint:fix": "ng lint --fix --files" }
如果是针对特定Nx项目,可改为:
"lint:fix": "ng lint your-project-name --fix --files"
5. 验证配置
修改一个不符合lint规则的文件,执行git add后尝试提交,此时应该:
- 自动运行lint:fix修复代码
- 若存在无法自动修复的错误,命令返回非0退出码,husky会阻止提交
- 修复后的文件自动被git暂存,无需手动add
二、是否继续使用旧版本?
不建议继续使用husky 4.x和lint-staged 11.x,原因:
- 旧版本已停止维护,不会再修复安全漏洞或兼容性问题
- 旧版本依赖的Git钩子机制在新版Git/Node.js环境下可能出现异常
- 旧版本的配置方式(仅package.json)在复杂项目中扩展性差
三、新版本的核心优势
husky 8.x
- 采用Git原生钩子机制,不再依赖package.json或.huskyrc配置,逻辑更清晰
- 钩子文件独立存储在
.husky目录,便于版本控制和团队协作 - 移除了旧版本的冗余依赖,启动速度更快
- 支持更多钩子类型的自定义配置
lint-staged 13.x
- 优化了文件匹配和命令执行逻辑,大型项目下性能显著提升
- 支持并发执行命令,进一步提高效率
- 增强了错误处理机制,确保命令退出码正确传递给husky,精准阻止不合格提交
- 提供更灵活的配置选项,支持自定义文件过滤、命令参数等
内容的提问来源于stack exchange,提问作者afriedman111
相关产品推荐
相关产品推荐

