将其添加到 package.json 后,husky 预提交钩子不起作用
Posted
技术标签:
【中文标题】将其添加到 package.json 后,husky 预提交钩子不起作用【英文标题】:husky pre-commit hook not working after adding it to package.json 【发布时间】:2021-07-07 10:53:20 【问题描述】:我正在开发一个项目,我希望每次尝试提交新更改时,都会运行我的测试,并据此决定提交是否会发生。为此,我进行了研究,发现我可以使用husky's pre-commit hook。
我首先在我的项目中安装了 husky
npm i husky --save-dev
在我的package.json
中安装了"husky": "^6.0.0"
。
然后我按照教程在package.json
中添加了以下对象
"husky":
"hooks":
"applypatch-msg": "echo \"[Husky] applypatch-msg\"",
"pre-applypatch": "echo \"[Husky] pre-applypatch\"",
"post-applypatch": "echo \"[Husky] post-applypatch\"",
"pre-commit": "echo \"[Husky] pre-commit\""
如您所见,运行 git commit -m "some message!"
应该回显一堆东西,这意味着 husky 的预提交挂钩正在工作,但没有任何类似的东西得到回显。现在我只是不知道为什么这不起作用。如果它成功了,我会继续在 pre-commit 挂钩中添加脚本来运行我的测试。
顺便说一下,这里是package.json
文件:
"name": "test app",
"version": "1.0.1",
"description": "test app",
"main": "index.js",
"scripts":
"start": "node index.js",
"dev": nodemon index.js",
"test": "find ./plugins -name '*test.js' | xargs mocha -R spec"
,
"dependencies":
"@hapi/boom": "^9.0.0",
"@hapi/glue": "^7.0.0",
"@hapi/good": "^9.0.0",
"@hapi/good-console": "^9.0.0",
"@hapi/good-squeeze": "^6.0.0",
"@hapi/hapi": "^19.1.1",
"@hapi/joi": "^17.1.1",
"axios": "^0.19.2",
"babel-eslint": "^10.1.0",
"base-64": "0.1.0",
"confit": "2.3.0",
"hapi-auth-jwt2": "^8.8.1",
"hapi-mongodb": "^9.0.0",
"jws": "4.0.0",
"mongodb": "^3.5.7",
"pad-left": "2.1.0",
"pino": "^5.16.0",
"query-string": "^6.13.1",
"redis": "^2.8.0",
"selectn": "^1.1.2",
"superagent": "3.8.2",
"utf8": "^3.0.0",
"uuid": "^3.4.0",
,
"devDependencies":
"chai": "^4.1.2",
"chai-datetime": "^1.6.0",
"chai-http": "^4.0.0",
"husky": "^6.0.0",
"mocha": "^5.1.1",
"nodemon": "^2.0.4",
"proxyquire": "^2.0.1",
"sinon": "^5.0.10",
"sinon-test": "^2.2.0"
,
"husky":
"hooks":
"applypatch-msg": "echo \"[Husky] applypatch-msg\"",
"pre-applypatch": "echo \"[Husky] pre-applypatch\"",
"post-applypatch": "echo \"[Husky] post-applypatch\"",
"pre-commit": "echo \"[Husky] pre-commit\""
【问题讨论】:
好吧,我仍然无法让它工作,但我确实发现使用 husky v6,我们不再在 package.json 文件中添加这样的钩子了。然而,将 husky 降级到第 4 版也没有奏效。为什么? 我对赫斯基本身知之甚少,但是:这些不同的步骤中的哪一个在您的存储库中的.git/hooks/
中安装了文件?检查至少有一个可执行的 Git 钩子,例如,.git/hooks/pre-commit
存在并且是可执行的。
【参考方案1】:
这有点旧,但也许我的解决方案会对某人有所帮助。
我也无法使用这种技术。我发现的最干净的是
将脚本添加到 json 包中:
"prepare": ""chmod ug+x ./installHooks.sh && ./installHooks.sh""
installHooks.sh 包含:
#!/bin/zsh
FILE=.husky
if test -d "$FILE"; then
echo "$FILE folder already exists, deleting it before new husky installation";
rm -rf "./$FILE"
# else echo "$FILE doesn't exist yet";
fi
cd ../ && husky install ./sub-project/.husky
cd sub-project && npx husky add .husky/pre-commit 'cd sub-project && npm test'
chmod ug+x ./.husky/*
echo "hooks correctly installed. you may find them in `.husky/pre-commit`"
echo "they will be triggered each time you commit"
说明:
运行npm install
时会自动运行准备脚本,也可以使用npm run prepare
运行
它将 installHooks.sh 的模式更改为可执行然后运行它。
installHooks 将检查 .husky 文件夹是否已经存在,如果是则将其删除,然后安装 husky (注意,在子项目中上一个文件夹然后下一个文件夹是因为我的 git repo 包含多个子项目,我想将其安装在前端的,这里称为子项目。husky 要求您从根目录安装它,因此这是一种解决方法)。然后添加 pre-commit hook (npm test) 最后使用 chmod 使 husky hooks 可执行
如果您有任何问题,请告诉我。我刚刚开始编写脚本,所以这可能不是最好的方法,但它可以工作
【讨论】:
以上是关于将其添加到 package.json 后,husky 预提交钩子不起作用的主要内容,如果未能解决你的问题,请参考以下文章
升级到 vue 3 后:“找不到模块 '@vue/compiler-sfc/package.json'”
为啥我可以将脚本添加到 package.json 中的脚本? [关闭]