Files

10 KiB
Raw Permalink Blame History

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ…ΡƒΠΊΠ°

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ…ΡƒΠΊΠ° Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ созданиС Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вашСго любимого Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, скрипта ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo. НапримСр, Π² Linux/macOS:

echo "npm test" > .husky/pre-commit

Π€Π°ΠΉΠ»Ρ‹ запуска

Husky позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ…ΡƒΠΊΠΎΠ². Он считываСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²:

  • $XDG_CONFIG_HOME/husky/init.sh
  • ~/.config/husky/init.sh
  • ~/.huskyrc (устарСло)

Π’ Windows: C:\Users\yourusername\.config\husky\init.sh

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ Ρ…ΡƒΠΊΠΎΠ² Git

Для ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Git Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΡŽ -n/--no-verify для пропуска Ρ…ΡƒΠΊΠΎΠ²:

git commit -m "..." -n # ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ Ρ…ΡƒΠΊΠΈ Git

Для ΠΊΠΎΠΌΠ°Π½Π΄ Π±Π΅Π· этого Ρ„Π»Π°Π³Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ…ΡƒΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HUSKY=0:

HUSKY=0 git ... # Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Ρ…ΡƒΠΊΠΈ Git
git ... # Π₯ΡƒΠΊΠΈ снова запустятся

Для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊΠΈ для Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ врСмя rebase/merge):

export HUSKY=0 # ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Ρ…ΡƒΠΊΠΈ Git
git ...
git ...
unset HUSKY # ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…ΡƒΠΊΠΈ

Для GUI ΠΈΠ»ΠΈ глобально

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊΠΈ Git Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ GUI ΠΈΠ»ΠΈ глобально, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ husky:

# ~/.config/husky/init.sh
export HUSKY=0 # Husky Π½Π΅ установит ΠΈ Π½Π΅ запустит Ρ…ΡƒΠΊΠΈ Π½Π° вашСй машинС

CI-сСрвСр ΠΈ Docker

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ установки Ρ…ΡƒΠΊΠΎΠ² Git Π½Π° CI-сСрвСрах ΠΈΠ»ΠΈ Π² Docker, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ HUSKY=0. НапримСр, Π² GitHub Actions:

# https://docs.github.com/en/actions/learn-github-actions/variables
env:
HUSKY: 0

Если устанавливаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ dependencies (Π½Π΅ devDependencies), скрипт "prepare": "husky" ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ошибкой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Husky Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ установлСн.

Π£ вас Π΅ΡΡ‚ΡŒ нСсколько Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ скрипт prepare, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ ошибкой:

// package.json
"prepare": "husky || true"

Π’Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС command not found Π² Π²Ρ‹Π²ΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΡ…ΠΈΠΌ, создайтС .husky/install.mjs:

// ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ установку Husky Π² production ΠΈ CI
if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') {
  process.exit(0)
}
const husky = (await import('husky')).default
console.log(husky())

Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² prepare:

"prepare": "node .husky/install.mjs"

ВСстированиС Ρ…ΡƒΠΊΠΎΠ² Π±Π΅Π· ΠΊΠΎΠΌΠΌΠΈΡ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ exit 1 Π² скрипт Ρ…ΡƒΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Git ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

# .husky/pre-commit

# Π’Π°Ρˆ скрипт WIP
# ...

exit 1
git commit -m "testing pre-commit code"
# ΠšΠΎΠΌΠΌΠΈΡ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Git

Husky Π½Π΅ устанавливаСтся Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ (../) ΠΏΠΎ сообраТСниям бСзопасности. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² скриптС prepare.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

.
β”œβ”€β”€ .git/
β”œβ”€β”€ backend/ # НСт package.json
└── frontend/ # Package.json с husky

НастройтС скрипт ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

"prepare": "cd .. && husky frontend/.husky"

Π’ скриптС Ρ…ΡƒΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

# frontend/.husky/pre-commit
cd frontend
npm test

Π₯ΡƒΠΊΠΈ, Π½Π΅ относящиСся ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипты, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ использования языка сцСнариСв, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠ³ΠΎ Ρ…ΡƒΠΊΠ°:

(ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ…ΡƒΠΊΠ° pre-commit ΠΈ NodeJS)

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для Ρ…ΡƒΠΊΠ°:
    .husky/pre-commit
    
  2. Π’ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅
    node .husky/pre-commit.js
    
  3. Π² .husky/pre-commit.js
    // Π’Π°Ρˆ ΠΊΠΎΠ΄ NodeJS
    // ...
    

Bash

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Ρ…ΡƒΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ совмСстимы с POSIX, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρƒ всСх Π΅ΡΡ‚ΡŒ bash (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Windows).

ΠŸΡ€ΠΈ этом, Ссли ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Windows, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Bash ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# .husky/pre-commit

bash << EOF
# ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ свой скрипт bash Π²Π½ΡƒΡ‚Ρ€ΡŒ
# ...
EOF

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ вСрсий Node ΠΈ графичСскиС интСрфСйсы

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ…ΡƒΠΊΠΈ Git Π² графичСских интСрфСйсах с Node, установлСнным Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ вСрсий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, nvm, n, fnm, asdf, volta ΠΈ Ρ‚. Π΄.), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ошибкой command not found ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды PATH.

ПониманиС PATH ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² вСрсий

PATH β€” это пСрСмСнная срСды, содСрТащая список ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Π’Π°ΡˆΠ° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈΡ‰Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² этих ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…. Если ΠΎΠ½Π° Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ сообщСниС command not found.

ЗапуститС echo $PATH Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π΅ содСрТимоС.

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ вСрсий Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π”ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ» запуска ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ (.zshrc, .bashrc ΠΈ Ρ‚. Π΄.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.
  2. Π—Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ вСрсии Node Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² вашСй домашнСй ΠΏΠ°ΠΏΠΊΠ΅.

НапримСр, Ссли Ρƒ вас Π΄Π²Π΅ вСрсии Node:

~/version-manager/Node-X/node
~/version-manager/Node-Y/node

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ вСрсий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Node-Y) ΠΈ добавляСт Π΅Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ PATH:

echo $PATH
# Π’Ρ‹Π²ΠΎΠ΄
~/version-manager/Node-Y/:...

Π’Π΅ΠΏΠ΅Ρ€ΡŒ node ссылаСтся Π½Π° Node-Y. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Node-X соотвСтствСнно измСняСт PATH:

echo $PATH
# Π’Ρ‹Π²ΠΎΠ΄
/version-manager/Node-X/:...

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ GUI, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ вСрсий, оставляя PATH Π±Π΅Π· ΠΏΡƒΡ‚ΠΈ установки Node. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ…ΡƒΠΊΠΈ Git ΠΈΠ· GUI часто тСрпят Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ.

РСшСниС

Husky создаСт ~/.config/husky/init.sh ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ…ΡƒΠΊΠΎΠΌ Git. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ сюда ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вашСго ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° вСрсий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² GUI.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с nvm:

# ~/.config/husky/init.sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # Π­Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ nvm

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Ссли ваш Ρ„Π°ΠΉΠ» запуска ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ быстрый ΠΈ Π»Π΅Π³ΠΊΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

# ~/.config/husky/init.sh
. ~/.zshrc

Ручная настройка

Git Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π° husky Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² .husky/.

ЗапуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ husky ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² вашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π΅ Π² скрипт prepare Π² package.json для автоматичСского выполнСния послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ установки (рСкомСндуСтся).

::: code-group

{
  "scripts": {
    "prepare": "husky" // [!code hl]
  }
}
{
  "scripts": {
    "prepare": "husky" // [!code hl]
  }
}
{
  "scripts": {
  // Yarn Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ скрипт ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ
  "postinstall": "husky",
  // Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ это ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° npmjs.com
  "prepack": "pinst --disable",
  "postpack": "pinst --enable"
}
}
{
  "scripts": {
  "prepare": "husky" // [!code hl]
}
}

:::

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ prepare once:

::: code-group

npm run prepare
pnpm run preparation
# Yarn Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ `prepare`
yarn run postinstall
bun run preparation

:::

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» pre-commit Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ .husky/:

::: code-group

# .husky/pre-commit
npm test
# .husky/pre-commit
pnpm test
# .husky/pre-commit
yarn test
# .husky/pre-commit
тСст Π±ΡƒΠ»ΠΎΡ‡ΠΊΠΈ

:::