Добавить в корзинуПозвонить
Найти в Дзене

Никогда бы не подумал, что можно делать pre-commit без Husky

Husky не лает, а воет. Husky позволяет настраивать сценарии перед отправкой в репозиторий и в основном используется для запуска проверок eslint, tslint, и если там есть ошибки — начинает выть. 🙂 Не так давно стартовал новый проект, и вот дошла очередь до автоматизации некоторых процессов. Решил настроить Husky. Но с первого раза он не запустился. Промучился какое-то время (неприлично долго) и понял, что проблема в том, что мы используем yarn. Казалось бы, отказаться от него и перейти на npm — это решение, но что? Правильно, это не путь самурая. Пошел посмотреть, что там в исходниках, и понял, что в целом это простой скрипт поверх стандартных git hook. Исходник Когда мне всё стало понятно, я сделал так: yarn remove husky
И просто написал с помощью Google и частично DeepSeek свой хук на bash. ☕️ Но у меня возникла проблема: на личном компьютере всё работало, а на рабочем — нет. После долгих экспериментов понял причину — пока я делал разные подходы с Husky, пришлось обновить NodeJS.

Husky не лает, а воет.

Husky позволяет настраивать сценарии перед отправкой в репозиторий и в основном используется для запуска проверок eslint, tslint, и если там есть ошибки — начинает выть. 🙂

Не так давно стартовал новый проект, и вот дошла очередь до автоматизации некоторых процессов. Решил настроить Husky. Но с первого раза он не запустился. Промучился какое-то время (неприлично долго) и понял, что проблема в том, что мы используем yarn. Казалось бы, отказаться от него и перейти на npm — это решение, но что? Правильно, это не путь самурая. Пошел посмотреть, что там в исходниках, и понял, что в целом это простой скрипт поверх стандартных git hook.

Исходник

Когда мне всё стало понятно, я сделал так:

yarn remove husky


И просто написал с помощью Google и частично DeepSeek свой хук на bash. ☕️

Но у меня возникла проблема: на личном компьютере всё работало, а на рабочем — нет. После долгих экспериментов понял причину — пока я делал разные подходы с Husky, пришлось обновить NodeJS. В новом сценарии при попытке запустить скрипт линтера пути интерпретировались неправильно т.к. была информация о двух версиях NodeJS, одна хранилась в nvm, другая в настройках zsh. Возможно, это проблема только zsh, но вот решение, которое помогло:

nano ~/.zshrc
# Удалите строку вида: export PATH="/opt/homebrew/opt/node@22/bin:$PATH"

Обновите Node.js через nvm. Я обновлял его через brew, и скорее всего это была ошибка. ☹️

nvm install 22
nvm alias default 22
nvm use 22
node -v # убедитесь, что версия 22.*

Осталось только написать обвязку для передачи этого хука команде — тут слава богу можно было обойтись родным JS и не обращаться к Google или DeepSeek.

На самом деле это не первый мой опыт: когда проще и быстрее было написать что-то своё, чем разбираться, почему не работает библиотека. Но таких случаев было мало — их можно пересчитать по пальцам одной руки. Ни когда не бойтесь залезать в исходники в поисках решения проблем! 🙂

#JavaScript #FrontEnd #Разработка

Выложу bash-скрипт и напишу инструкцию по тому, как разшарить хук на команду — если будет больше одного лайка! 👍