如何仅在子目录中运行 husky 预提交
Posted
技术标签:
【中文标题】如何仅在子目录中运行 husky 预提交【英文标题】:How to run husky pre-commit in child directory only 【发布时间】:2019-05-21 00:04:58 【问题描述】:我们有一个企业应用程序,其文件夹结构如下:
/项目 .git /sub1 ...Java 项目 /sub2 包.json ...javascript 骨干项目 /sub3 ...Java 项目 /sub4 ...Java 项目 /sub5 包.json ...Javascript React 项目我目前在 sub2 和 sub5 项目中都设置了 Husky,这会导致冲突(每次切换项目时都需要安装 npm)。此外,Java 开发人员报告说,当他们在项目 sub1、sub3 和 sub4 中提交代码时,正在执行 Husky git 挂钩。
是否可以只在提交时在某个文件夹中运行挂钩?
【问题讨论】:
【参考方案1】:我遇到了同样的问题。我通过在主目录中安装 husky 来修复它。 我的设置:
/项目 .git 包.json /前端 包.json /前端管理员 包.json在/project/package.json
:
"license": "MIT",
"version": "0.0.1",
"private": true,
"scripts":
"frontend": "cd frontend && yarn lint"
"frontend:admin": "cd frontend-admin && yarn lint",
,
"husky":
"hooks":
"pre-commit": "npm-run-all frontend frontend:admin"
,
// In the main folder you should install husky
// and npm-run-all to execute multiple commands
"dependencies":
"husky": "^4.3.0",
"npm-run-all": "^4.1.5"
您的子目录应该有一个要执行的 lint 脚本。 当其中一个脚本崩溃时,husky 会立即报告并中止。
【讨论】:
【参考方案2】:是否可以只在提交时在某个文件夹中运行挂钩?
不,但是钩子本身可以确定它在运行时在哪个目录。这没有正确记录,但是在 Git chdir
-s 到 $GIT_WORK_TREE
或 $GIT_DIR
目录之前的环境中设置了 GIT_PREFIX
。 (从 Git 版本 1.7.8 开始就是这种情况。)
【讨论】:
我们可以举个例子说明如何使用它吗? @MauroColella:在 shell 代码中,使用:loc=$GIT_PREFIX:-.
,然后您所在的目录位于 $loc
。例如,在cd
-ing 到工作树的顶层之后,$loc
只是.
,但在随后的cd dir1/dir2
之后,$loc
是dir1/dir2
。【参考方案3】:
我通过在 /root 目录中安装和运行 husky 解决了同样的问题。 (这是必需的,因为 husky 需要与 .git 文件夹位于同一目录中。
npm install husky
npx husky install #use this command to create a .husky folder
搜索“预提交”文件
cd ./frontend && npm run lint && npm run build
cd ..
cd ./backend && npm run lint && npm run test
注意:输入相同的命令以执行每个子目录/项目 谢谢!
【讨论】:
以上是关于如何仅在子目录中运行 husky 预提交的主要内容,如果未能解决你的问题,请参考以下文章
使用 Husky 时出现预提交错误“找不到模块 - npx-cli.js”