将 commitlint 添加到 husky 的 commit-msg 钩子的正确方法是什么?

问题描述

我有一个 angular 项目,我想在其中强制执行常规提交。我没能成功地使用正确的钩子来防止错误的钩子。

我从 this tutorial 开始,它说要将以下内容添加到 package.json:

{
  "hooks": {
    "commit-msg": "commitlint -E HUSKY_GIT_ParaMS"
  }
}

这不起作用(它仍然会导致错误的提交)所以我做了一些研究并发现 this article 那里说上面是针对 husky 4 的,对于 husky 5 我应该运行这个命令:>

npx husky add .husky/commit-msg 'npx commitlint --edit $1'

据我所知,commitlint official docs 说要以同样的方式进行。但是,当我运行它时,我得到了这个奇怪的提示,它什么也没做:

PS C:\...\MyProj> npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
Usage
  husky install [dir] (default: .husky)
  husky uninstall
  husky set|add <file> [cmd]

这只是令人困惑,因为我写的实际上是在提示的第三行之后。

有没有人经历过这个并且可以帮助我理解我需要做什么?

package.json 中的相关部分:

"scripts": {
    "postinstall": "husky install"
  },"private": true,"devDependencies": {
    "@commitlint/cli": "^12.1.1","@commitlint/config-conventional": "^12.1.1","husky": "^6.0.0"
  }
}

解决方法

运行 npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1' 似乎有问题,因为命令部分不止一个词。我发现的一种解决方法是将其分成两部分。

1 - 调用 npx husky add .husky/commit-msg

这在正确的位置创建了一个空/默认文件,内容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

undefined

2 - 然后我只是用 undefined 替换了 npx --no-install commitlint --edit $1 并且它有效

This part of the commitlint docs 帮助我理解这样做是可以的

希望这对遇到相同问题的其他人有所帮助!