10 KiB
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ ΡΠΊΠ°
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠΊΠ° ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ Π»ΡΠ±ΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, ΡΠΊΡΠΈΠΏΡΠ° ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ 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)
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΡΠΊΡ Π²Ρ
ΠΎΠ΄Π° Π΄Π»Ρ Ρ
ΡΠΊΠ°:
.husky/pre-commit - Π ΡΠ°ΠΉΠ» Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅
node .husky/pre-commit.js - Π²
.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 Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅.
ΠΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ Π²Π΅ΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°ΠΉΠ» Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ (
.zshrc,.bashrcΠΈ Ρ. Π΄.), ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°. - ΠΠ°Π³ΡΡΠΆΠ°ΡΡ Π²Π΅ΡΡΠΈΠΈ 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
ΡΠ΅ΡΡ Π±ΡΠ»ΠΎΡΠΊΠΈ
:::