Git Hooks y Husky
Los Git hooks son scripts que se ejecutan automáticamente cuando ocurren eventos de Git. pre-commit se ejecuta antes de crear un commit (ideal para correr el linter o tests rápidos). commit-msg valida el formato del mensaje de commit. pre-push corre los tests completos antes de enviar al remoto. Ayudan a mantener la calidad del código de forma automática.
Husky facilita gestionar hooks en proyectos JavaScript/Node: los define en package.json y los instala automáticamente cuando alguien hace npm install, garantizando que todo el equipo tenga los mismos hooks. lint-staged complementa a Husky ejecutando el linter solo en los archivos modificados (staged), haciendo el proceso mucho más rápido que analizar todo el proyecto.
# Los hooks viven en .git/hooks/ (no se versionan)
ls .git/hooks/
# pre-commit, commit-msg, pre-push, post-merge...
# Ejemplo: hook pre-commit manual (shell script)
# .git/hooks/pre-commit
#!/bin/sh
npm run lint
npm run test
# Si devuelve código != 0, el commit se cancela
# --- HUSKY (gestión de hooks en npm) ---
npm install --save-dev husky
npx husky init
# Crea la carpeta .husky/ (versionable)
# Hook pre-commit con Husky
# .husky/pre-commit
npx lint-staged
# Hook commit-msg: validar formato
# .husky/commit-msg
npx --no -- commitlint --edit $1
# --- LINT-STAGED: solo formatea archivos staged ---
npm install --save-dev lint-staged
# package.json
# "lint-staged": {
# "*.{js,ts,jsx,tsx}": ["eslint --fix", "prettier --write"],
# "*.{css,json,md}": ["prettier --write"]
# }
Practica esta lección
Resuelve los ejercicios del curso de Git y GitHub en la app, gratis y con corrección automática.
Empezar a practicar