Как установить git hooks на "npm install"?
Я хочу установить hook pre-commit
git (который начерпывает код), когда кто-то устанавливает my-package
.
Я попытался добавить postinstall
script:
"scripts": {
"postinstall": "./scripts/install-git-hooks"
}
Это отлично работает. Когда кто-то запускает npm install
, он получает установленный крюк pre-commit
.
Однако, если another-package
зависит от my-package
, запуск npm install
для another-package
также запускает postinstall
script, что нежелательно.
Какой самый чистый способ избежать этого нежелательного воздействия?
Ответы
Ответ 1
Вы можете использовать ghooks модуль npm и добавить его как dev-dependency. Вы можете настроить, что нужно выполнить перед фиксацией в вашем package.json, например:
[...]
"config": {
"ghooks": {
"pre-commit": "npm test"
}
}
[...]
Ответ 2
Хакки, но может работать для вас.
Фокус в том, чтобы идентифицировать (в пределах script), если он является зависимой от зависимостей или корневой зависимостью для установки NPM. Просто проверьте, существует ли ../../package.json
. Если это так, это зависит от суба, и вы должны пропустить установку крючков.
Следует отметить, что вы нарушаете любые согласованные правила установки, что в точности соответствует духу сценариев установки. Это делается для установки клиентских боксов, которым нельзя доверять никакими средствами, если вам нужно, чтобы листинг был принудительно применен, это должно быть сделано на стороне сервера, где он может просто отклонить код, который не соответствует.
Потенциально эта проблема будет лучше решена, как вы упомянули, имея ее как пользовательскую установку script и просто имея дело с дополнительными служебными данными.