如何从子目录引用父目录的Git pre-commit hooks(Husky+NX场景)
配置NX Workspace子目录读取父目录Git及Husky配置
核心逻辑
Git和Husky的配置依赖仓库根目录(即parent/)的上下文,所以要让NX子目录的脚本执行时,能关联到父目录的Git仓库与Husky配置,核心是通过目录切换或环境变量指定来打通上下文。
具体配置步骤
1. 确认父目录基础配置
确保parent/.husky目录下的钩子脚本(如pre-commit、commit-msg)已正常配置,且parent/下的.git仓库已完成初始化。
2. 修改NX子目录的package.json脚本
在nx-workspace/package.json的scripts字段中,给需要调用Git或Husky的命令添加目录切换逻辑,确保命令在父目录上下文执行:
{ "scripts": { "prepare": "cd .. && husky install .husky && cd nx-workspace", "commit": "cd .. && git commit && cd nx-workspace", "lint-staged": "cd .. && lint-staged && cd nx-workspace" } }
3. 让Husky钩子适配NX项目
如果Husky钩子需要执行NX相关命令(如代码检查、测试),直接在parent/.husky的钩子脚本中切换到NX子目录执行即可。比如修改parent/.husky/pre-commit:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" cd nx-workspace npx nx run-many --target=lint --all
4. 可选:通过环境变量指定Git上下文
如果部分命令无法自动识别Git根目录,可在NX子目录的脚本中通过环境变量明确指定:
{ "scripts": { "git-status": "GIT_DIR=../.git GIT_WORK_TREE=.. git status" } }
验证配置
进入NX子目录执行初始化脚本,再尝试提交代码,检查Husky钩子是否正常触发并执行NX项目的校验逻辑:
cd nx-workspace npm run prepare
内容的提问来源于stack exchange,提问作者3gwebtrain
相关产品推荐
相关产品推荐

