Husky vs Lefthook: Gerenciando Git Hooks
O Husky é o gerenciador de git hooks baseado em Node amplamente usado; o Lefthook é um binário único, rápido e agnóstico de linguagem que roda hooks em paralelo.
O Husky configura git hooks para projetos Node com configuração mínima e é o padrão para muitos times JavaScript, normalmente combinado com lint-staged. O Lefthook é um binário Go independente que funciona para qualquer linguagem, configura hooks em YAML e roda comandos em paralelo com filtragem por glob embutida. O Husky é nativo do ecossistema JS e onipresente; o Lefthook é mais rápido e agnóstico de linguagem.
| Husky | Lefthook | |
|---|---|---|
| Runtime | Node | Binário Go único |
| Linguagens | Centrado em JS | Qualquer linguagem |
| Paralelismo | Via lint-staged | Embutido |
| Configuração | Scripts de hook | YAML |
| Melhor para | Projetos Node | Poliglota, velocidade |
No CI
Os hooks rodam principalmente localmente, mas as mesmas verificações devem ficar no CI como o portão de verdade. O Husky encaixa em repositórios Node que já usam a tooling do npm; o Lefthook roda em qualquer lugar sem Node e paraleliza as verificações, o que ajuda em grandes suítes de pre-commit. De qualquer forma, espelhe os comandos dos hooks em um job de CI para que as verificações sejam impostas independentemente da configuração local.
Acelere
Rode os mesmos comandos de lint/test no CI e faça cache das dependências para que comecem aquecidas. As verificações de CI rodam em runners; runners gerenciados mais rápidos encurtam a execução de lint e teste.
O veredito
Um projeto centrado em Node que quer a opção onipresente e bem documentada: Husky. Um repositório poliglota ou que quer um binário rápido, sem dependências e com hooks paralelos: Lefthook. Qualquer que seja sua escolha, imponha as mesmas verificações no CI em vez de depender apenas dos hooks.