Els hooks de Git permeten executar scripts automàtics abans o després d'esdeveniments locals com ara confirmar canvis, enviar codi o fusionar branques. Són una eina essencial per mantenir la qualitat del codi sense dependre exclusivament de la integració contínua. No obstant, configurar-los manualment a cada clon del repositori pot ser tediós i propens a errors. Aquí entra Husky, una llibreria que simplifica la gestió d'aquests ganxos i els centralitza al directori .husky/ del projecte. En aquest article explorarem com implementar Husky v9 amb lint-staged, cobrirem hooks útils com pre-commit, commit-msg i pre-push, veurem com saltar hooks en CI i analitzarem bones pràctiques per a equips de desenvolupament. Aquest contingut no només et servirà com a guia tècnica, sinó que també et mostrarà com aquestes eines s'integren en estratègies més àmplies d'automatització, qualitat i seguretat, com les que ofereix Q2BSTUDIO en els seus projectes de desenvolupament de programari.
Abans de profunditzar, cal entendre el model mental: Husky no inventa un sistema de hooks nou; el que fa és apuntar la ruta core.hooksPath de Git al directori .husky/. Això vol dir que els hooks són scripts de shell estàndard que Git executa de forma nativa. L'avantatge de Husky és que automatitza la instal·lació d'aquests scripts mitjançant un script prepare a package.json. Així, cada vegada que un desenvolupador executa npm install, els hooks s'instal·len automàticament sense passos manuals addicionals. Per començar, necessites Node.js (versió 20 o superior, tot i que la documentació actual de Husky v9 recomana 18+), un repositori Git inicialitzat i les dependències: npm i -D husky i opcionalment lint-staged, ESLint i Prettier.
El comandament npx husky init crea la carpeta .husky/ amb un hook pre-commit per defecte i afegeix el script prepare: 'husky' al teu package.json. Aquest script s'executa després de cada npm install, garantint que tots els membres de l'equip tinguin la mateixa configuració de hooks. A partir d'aquí, pots modificar el fitxer .husky/pre-commit perquè executi les comprovacions que vulguis. La pràctica més comuna és usar lint-staged, que limita l'execució de linters i formatejadors únicament als fitxers que estan a l'àrea de staging. Això evita alentir el commit amb anàlisis sobre tot l'arbre de treball. Configures lint-staged a package.json amb un objecte que assigna patrons de fitxers a comandaments, per exemple: '*.{js,ts}': ['eslint --fix', 'prettier --write']. Després, al hook pre-commit, simplement executes npx lint-staged. Si algun comandament falla (codi de sortida diferent de zero), Git avorta el commit, cosa que actua com un guardià primerenc abans que el codi surti de la teva màquina.
Mantenir el pre-commit ràpid és clau. Per això, només s'han d'incloure tasques lleugeres i locals als fitxers modificats. Les tasques pesades, com la suite completa de tests o l'anàlisi estàtic de tot el projecte, és millor deixar-les per al hook pre-push o per a la CI. El hook commit-msg és un altre aliat important: pots validar el format del missatge de commit i, per exemple, bloquejar missatges que comencin amb 'WIP' o que no segueixin una convenció. Per fer-ho, a .husky/commit-msg llegeixes el fitxer que Git passa com a primer argument ($1) i apliques una expressió regular. Si la validació falla, mostres un missatge i surts amb codi 1. De manera similar, el hook pre-push pot executar una bateria de tests més ràpida abans d'enviar la branca al remot, evitant pujar canvis que trenquin la build.
Husky també ofereix mecanismes per ometre hooks quan sigui necessari. Git té la bandera --no-verify (-n) que salta tots els hooks locals. A més, pots desactivar Husky temporalment amb la variable d'entorn HUSKY=0. Això és útil en entorns CI on no té sentit executar hooks locals (ja que la CI executa les seves pròpies validacions). No obstant, cal anar amb compte: els hooks són locals, no s'executen al remot, i qualsevol pot saltar-los. No s'han de considerar una mesura de seguretat, sinó una ajuda per a la qualitat del codi. Si necessites seguretat, la ciberseguretat s'ha d'implementar a nivell de servidor i mitjançant polítiques d'integració contínua.
Un altre aspecte rellevant és la compatibilitat amb gestors de versions de Node (nvm, fnm) en entorns GUI. Els clients gràfics de Git sovint no tenen accés a la mateixa shell que la terminal, per la qual cosa és possible que no trobin el binari de Husky. La solució recomanada pels mantenidors de Husky és crear un fitxer ~/.config/husky/init.sh que carregui el gestor de versions corresponent. A més, en monorepos o projectes amb subdirectoris, instal·la Husky sempre a l'arrel del repositori, no en paquets niats, perquè els hooks s'apliquin a tot el projecte.
Husky i lint-staged són només una peça de l'ecosistema d'automatització. A agents IA i aplicacions modernes, la qualitat del codi és un factor crític. Les empreses que desenvolupen programari a mida, com Q2BSTUDIO, integren aquestes eines als seus pipelines de CI/CD juntament amb serveis cloud AWS o Azure, business intelligence amb Power BI i estratègies de ciberseguretat. Per exemple, un hook pre-push podria executar proves unitàries ràpides abans de desplegar en un entorn de proves al núvol. O un hook commit-msg podria forçar un format que després sigui analitzat per un sistema de BI per mesurar la productivitat de l'equip. Tot això forma part d'una cultura d'automatització que redueix errors humans i accelera el lliurament.
En conclusió, Husky és una eina senzilla però potent per establir controls locals abans que el codi arribi a la integració contínua. Combinat amb lint-staged, ESLint i Prettier, ofereix un filtre ràpid i eficaç que manté la coherència de la base de codi. Recorda que els hooks són un complement, no un substitut de la CI. La clau està a utilitzar-los per al que millor saben fer: comprovacions lleugeres i ràpides que donin feedback immediat al desenvolupador. Si vols portar l'automatització del teu projecte al següent nivell, considera adoptar aquestes pràctiques i recolza't en experts com Q2BSTUDIO, que ofereixen solucions integrals en desenvolupament d'aplicacions a mida, cloud, ciberseguretat, intel·ligència artificial i BI.





