如何在Git仓库子目录中运行pre-commit检查?
在Git非根目录执行pre-commit npm命令的方案
Python版pre-commit
无需额外切换目录的Shell脚本,直接在配置中指定工作目录即可:
在仓库根目录创建/修改.pre-commit-config.yaml:
repos: - repo: local hooks: - id: frontend-npm-check name: 执行frontend目录下的npm检查 entry: npm run lint # 替换为你需要的npm命令 language: node working_directory: frontend stages: [pre-commit]
working_directory参数会让pre-commit自动切换到指定目录执行命令,无需手动编写cd逻辑。
npm版pre-commit(observing/pre-commit)
利用npm自带的--prefix参数指定工作目录,在根目录package.json中配置:
{ "scripts": { "frontend-npm-lint": "npm run lint --prefix frontend" # --prefix直接指定目标目录 }, "pre-commit": [ "frontend-npm-lint" ] }
钩子触发时会自动到frontend目录执行对应的npm命令。
husky
提供两种无需额外Shell脚本的配置方式:
方式1:根目录钩子直接指定路径
初始化husky后,编辑.husky/pre-commit文件:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # 用--prefix参数指定frontend目录执行npm命令 npm run lint --prefix frontend
方式2:让husky直接读取frontend目录配置
在根目录package.json中设置husky的工作目录:
{ "husky": { "dir": "frontend" } }
之后在frontend目录下配置husky钩子和对应的npm scripts,husky会自动在该目录下执行钩子逻辑。
替代方案:Git原生钩子
直接编辑.git/hooks/pre-commit(需添加执行权限chmod +x .git/hooks/pre-commit):
#!/bin/sh npm run lint --prefix frontend
注:原生钩子不会随仓库同步,需手动复制或用脚本管理。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

