Я хотел бы установить ловушку git pre-commit (которая связывает код), когда кто-то устанавливает my-package.

Я попытался добавить скрипт postinstall:

"scripts": {
  "postinstall": "./scripts/install-git-hooks"
}

Это прекрасно работает. Когда кто-то запускает npm install, у него устанавливается ловушка pre-commit.

Однако, если another-package зависит от my-package, запуск npm install для another-package также запускает сценарий postinstall, что нежелательно.

Как лучше всего избежать этого нежелательного эффекта?

16
Misha Moroshko 12 Май 2016 в 10:29

2 ответа

Лучший ответ

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

[...]
"config": {
    "ghooks": {
        "pre-commit": "npm test"
    }
}
[...]
7
vincent 31 Май 2016 в 07:44

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

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

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

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

4
Luke Exton 26 Май 2016 в 10:38