¿Qué es Husky y cómo configurarlo en tu proyecto Git?
¿Alguna vez te ha pasado que alguien hace un commit sin pasar los linters o rompe el código porque no corrió las pruebas?
Aquí es donde entra Husky, una herramienta que ayuda a mantener tu proyecto limpio y saludable desde el momento en que alguien hace un commit. Antes de comenzar, activaremos algunos conceptos sobre los hooks de Git.
¿Qué es un hook en Git?
Un “Git Hook” es un script peronalizado que puedes ejecutar en respuesta a eventos específicos en el ciclo de vida de Git. Estos eventos pueden ser acciones como:
- Realizar un
commit
- Empujar cambiosm a un repositorio remoto con
push
- Fusionar ramas con
merge
Existen más pero normalmente esos eventos son los más frecuentes.
Git proporciona una serie de hooks predefinidos, y puedes personalizarlos para satisfacer las necesidades de tu flujo de trabajo. Algunos de los hooks más comunes son:
pre-commit
: Se ejecuta antes de confirmar los cambios (commit
). Puedes usarlo para realizar tareas como ejecutar pruebas automáticas o comprobar la calidad del código.pre-push
: Se ejecuta antes de empujar los cambios al repositorio remoto. Puedes realizar verificaciones adicionales antes de enviar los cambios al servidor.post-commit
: Se ejecuta después de que se ha confirmado un cambio. Puedes usarlo para realizar tareas adicionales después de que se ha realizado un commit.post-receive
: Se ejecuta en el repositorio remoto después de recibir nuevos cambios. Puede ser útil para realizar acciones en el servidor después de que se hayan empujado cambios en el repositorio remoto.
Para aprovechar los hooks en un repositorio Git, debes escribir scripts personalizados y colocarlos en la carpeta .git/hooks/
del repositorio. Git utiliza estos scripts automáticamente en función de los eventos correspondientes.
Husky es una herramienta de JavaScript que te permite agregar fácilmente Git hooks a tu proyecto.
¿Qué es Husky?
Husky es una librería que hace más fácil ejecutar automáticamente comandos o scripts en momentos específicos durante el desarrollo de proyectos.
Algunas características clave de Husky:
- Fácil configuración: Husky simplifica la configuración de hooks de Git mediante la definición en la sección de scripts en un archivo
package.json
. Esto facilita la comprensión y mantenimiento de los hooks en un proyecto. - Integración con comandos npm: Husky se integra normalmente con los comandos de npm, lo que significa que puedes usar todos los scripts definidos en el archivo
package.json
directamente como acciones para los hooks de Git. - Soporte de varios hooks: Husky es compatible con una variedad de hooks de Git, como
pre-commit
,pre-push
,post-merge
, entre otros. Esto permite ejecutar acciones personalizadas en diferentes etapas del ciclo de vida de Git. - Instalación automática de hooks: Husky puede configurar automáticamente los hooks de Git durante la instalación, eliminando la necesidad de configuración manual y mejorando la consistencia y coherencia en los equipos de desarrollos.
Instalación
Antes de comenzar con la instalación y configuración de Husky en tu proyecto, asegúrate de tener los siguiente:
git
yNode.js
instalados
mcherrera@dev:~$ git --version
2.43.0
mcherrera@dev:~$ node --version
v22.17.1
1. Inicializar un proyecto
En caso de que ya tengas un proyecto con JavaScript, lo más probable es que ya tengas un archivo package.json
, sino puedes inicializar uno con el siguiente comando:
1
npm init -y
2. Instalar dependencias
Ahora, tenemos que instalar Husky como dependencias de desarrollo:
1
npm install --save-dev husky
También vamos a instalar como dependencias de desarrollo los siguientes paquetes:
1
npm install --save-dev @commitlint/{cli,config-conventional}
@commitlint/config-conventional
: Esta dependencia proporciona una configuración predefenida para Commitlint badasa en las convenciones convencionales de mensajes para loscommit
.@commitlint/cli
: Esta dependencia es la interfaz de línea de comandos para CommitLint. Proporciona herramientas para ejecutar la validación de mensajes decommit
de acuerdo con las reglas establecidas en la configuración de Commitlint. Puedes usar este CLI (Command Line Interface) para verificar si tus mensajes decommit
cumplen con las convenciones configuradas.
Hasta aquí, nuestro archivo package.json
debe lucir parecido a lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "husky",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"husky": "^9.1.7"
}
}
3. Validar mensajes de commit
Las reglas convencionales son las siguientes:
chore
: Cambios en tareas, configuración, y otros aspectos relacionados con el mantenimiento del proyecto.docs
: Cambios en la documentación.feat
: Nuevas características.fix
: Correciones de errores.style
: Cambios que no afectan el significado del código (espacios en blanco, formato, punto y coma que faltan, etc.).test
: Añadir o modificar pruebas.
La siguiente tarea es establecer nuevos comandos para ejecutar con NPM en la sección de scripts en el archivo package.json
:
1
2
3
"scripts": {
"prepare": "husky install"
},
Para trabajar e interactuar con Husky, debemos ejecutar el siguiente comando en la terminal:
1
npx husky init
El comando anterior, creará una carpeta nueva en la raíz de nuestro proyecto llamada .husky
.