Как правильно добавить commitlint в крючок commit-msg в husky?

#node.js #commit #husky

Вопрос:

У меня есть угловой проект, в котором я хочу обеспечить выполнение обычных коммитов. Мне не удалось успешно сделать правильный крюк, чтобы предотвратить неправильные крючки.

Я начал с этого урока, где говорилось, что в package.json нужно добавить следующее:

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

Это не сработало (он все еще допускал плохие коммиты), поэтому я провел некоторое исследование и нашел эту статью, в которой говорилось, что вышесказанное относится к husky 4, а для husky 5 я должен выполнить эту команду:

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

Из того, что я могу сказать, официальные документы committlint говорят, чтобы сделать это таким же образом. Однако, когда я запускаю его, я получаю это странное приглашение, которое ничего не делает:

 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]
 

Это просто сбивает с толку, потому что то, что я написал, на самом деле следует за третьей строкой приглашения.

Кто-нибудь проходил через это и может помочь мне понять, что мне нужно сделать?

Соответствующие части из пакета.json:

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

Ответ №1:

Похоже, возникла проблема с запуском 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 , и это работает

Эта часть документов committlint помогла мне понять, что делать это таким образом было нормально

Надеюсь, это поможет всем, кто столкнется с той же проблемой!