You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:25:28