Los hooks de Git permiten ejecutar scripts automáticos antes o después de eventos locales como confirmar cambios, enviar código o fusionar ramas. Son una herramienta esencial para mantener la calidad del código sin depender exclusivamente de la integración continua. Sin embargo, configurarlos manualmente en cada clon del repositorio puede ser tedioso y propenso a errores. Aquí entra Husky, una librería que simplifica la gestión de estos ganchos y los centraliza en el directorio .husky/ del proyecto. En este artículo exploraremos cómo implementar Husky v9 con lint-staged, cubriremos hooks útiles como pre-commit, commit-msg y pre-push, veremos cómo saltar hooks en CI y analizaremos buenas prácticas para equipos de desarrollo. Este contenido no solo te servirá como guía técnica, sino que también te mostrará cómo estas herramientas se integran en estrategias más amplias de automatización, calidad y seguridad, como las que ofrece Q2BSTUDIO en sus proyectos de desarrollo de software.
Antes de profundizar, conviene entender el modelo mental: Husky no inventa un sistema de hooks nuevo; lo que hace es apuntar la ruta core.hooksPath de Git al directorio .husky/. Esto significa que los hooks son scripts de shell estándar que Git ejecuta de forma nativa. La ventaja de Husky es que automatiza la instalación de estos scripts mediante un script prepare en package.json. Así, cada vez que un desarrollador ejecuta npm install, los hooks se instalan automáticamente sin pasos manuales adicionales. Para empezar, necesitas Node.js (versión 20 o superior, aunque la documentación actual de Husky v9 recomienda 18+), un repositorio Git inicializado y las dependencias: npm i -D husky y opcionalmente lint-staged, ESLint y Prettier.
El comando npx husky init crea la carpeta .husky/ con un hook pre-commit por defecto y añade el script prepare: 'husky' a tu package.json. Este script se ejecuta después de cada npm install, garantizando que todos los miembros del equipo tengan la misma configuración de hooks. A partir de ahí, puedes modificar el archivo .husky/pre-commit para que ejecute las comprobaciones que desees. La práctica más común es usar lint-staged, que limita la ejecución de linters y formateadores únicamente a los archivos que están en el área de staging. Esto evita ralentizar el commit con análisis sobre todo el árbol de trabajo. Configuras lint-staged en package.json con un objeto que asigna patrones de archivos a comandos, por ejemplo: '*.{js,ts}': ['eslint --fix', 'prettier --write']. Luego, en el hook pre-commit, simplemente ejecutas npx lint-staged. Si algún comando falla (código de salida distinto de cero), Git aborta el commit, lo que actúa como un guardián temprano antes de que el código salga de tu máquina.
Mantener el pre-commit rápido es clave. Por eso, solo deben incluirse tareas ligeras y locales a los archivos modificados. Las tareas pesadas, como la suite completa de tests o el análisis estático de todo el proyecto, es mejor dejarlas para el hook pre-push o para la CI. El hook commit-msg es otro aliado importante: puedes validar el formato del mensaje de commit y, por ejemplo, bloquear mensajes que empiecen con 'WIP' o que no sigan una convención. Para ello, en .husky/commit-msg lees el archivo que Git pasa como primer argumento ($1) y aplicas una expresión regular. Si la validación falla, muestras un mensaje y sales con código 1. De manera similar, el hook pre-push puede ejecutar una batería de tests más rápida antes de enviar la rama al remoto, evitando subir cambios que rompan la build.
Husky también ofrece mecanismos para omitir hooks cuando sea necesario. Git tiene el flag --no-verify (-n) que salta todos los hooks locales. Además, puedes desactivar Husky temporalmente con la variable de entorno HUSKY=0. Esto es útil en entornos CI donde no tiene sentido ejecutar hooks locales (ya que la CI ejecuta sus propias validaciones). Sin embargo, hay que tener cuidado: los hooks son locales, no se ejecutan en el remoto, y cualquiera puede saltarlos. No deben considerarse una medida de seguridad, sino una ayuda para la calidad del código. Si necesitas seguridad, la ciberseguridad debe implementarse a nivel de servidor y mediante políticas de integración continua.
Otro aspecto relevante es la compatibilidad con gestores de versiones de Node (nvm, fnm) en entornos GUI. Los clientes gráficos de Git a menudo no tienen acceso a la misma shell que la terminal, por lo que es posible que no encuentren el binario de Husky. La solución recomendada por los mantenedores de Husky es crear un archivo ~/.config/husky/init.sh que cargue el gestor de versiones correspondiente. Además, en monorepos o proyectos con subdirectorios, instala Husky siempre en la raíz del repositorio, no en paquetes anidados, para que los hooks se apliquen a todo el proyecto.
Husky y lint-staged son solo una pieza del ecosistema de automatización. En agentes IA y aplicaciones modernas, la calidad del código es un factor crítico. Las empresas que desarrollan software a medida, como Q2BSTUDIO, integran estas herramientas en sus pipelines de CI/CD junto con servicios cloud AWS o Azure, business intelligence con Power BI y estrategias de ciberseguridad. Por ejemplo, un hook pre-push podría ejecutar pruebas unitarias rápidas antes de desplegar en un entorno de pruebas en la nube. O un hook commit-msg podría forzar un formato que luego sea analizado por un sistema de BI para medir la productividad del equipo. Todo esto forma parte de una cultura de automatización que reduce errores humanos y acelera la entrega.
En conclusión, Husky es una herramienta sencilla pero poderosa para establecer controles locales antes de que el código llegue a la integración continua. Combinado con lint-staged, ESLint y Prettier, ofrece un filtro rápido y eficaz que mantiene la coherencia del código base. Recuerda que los hooks son un complemento, no un sustituto de la CI. La clave está en usarlos para lo que mejor saben hacer: comprobaciones ligeras y rápidas que den feedback inmediato al desarrollador. Si quieres llevar la automatización de tu proyecto al siguiente nivel, considera adoptar estas prácticas y apóyate en expertos como Q2BSTUDIO, que ofrecen soluciones integrales en desarrollo de aplicaciones a medida, cloud, ciberseguridad, inteligencia artificial y BI.





