【问题标题】:husky pre-commit hook not working after adding it to package.json将其添加到 package.json 后,husky 预提交钩子不起作用
【发布时间】: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 存在并且是可执行的。

标签: javascript git mocha.js husky


【解决方案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 可执行

如果您有任何问题,请告诉我。我刚刚开始编写脚本,所以这可能不是最好的方法,但它可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-07
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2019-09-21
    • 2014-05-17
    相关资源
    最近更新 更多