Подтвердить что ты не робот

Как установить 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, что нежелательно.

Какой самый чистый способ избежать этого нежелательного воздействия?

4b9b3361

Ответ 1

Вы можете использовать ghooks модуль npm и добавить его как dev-dependency. Вы можете настроить, что нужно выполнить перед фиксацией в вашем package.json, например:

[...]
"config": {
    "ghooks": {
        "pre-commit": "npm test"
    }
}
[...]

Ответ 2

Хакки, но может работать для вас.

Фокус в том, чтобы идентифицировать (в пределах script), если он является зависимой от зависимостей или корневой зависимостью для установки NPM. Просто проверьте, существует ли ../../package.json. Если это так, это зависит от суба, и вы должны пропустить установку крючков.

Следует отметить, что вы нарушаете любые согласованные правила установки, что в точности соответствует духу сценариев установки. Это делается для установки клиентских боксов, которым нельзя доверять никакими средствами, если вам нужно, чтобы листинг был принудительно применен, это должно быть сделано на стороне сервера, где он может просто отклонить код, который не соответствует.

Потенциально эта проблема будет лучше решена, как вы упомянули, имея ее как пользовательскую установку script и просто имея дело с дополнительными служебными данными.