Os commits bem estruturados são fundamentais para a manutenção e evolução de qualquer projeto de software. Ferramentas como Husky já são bastante conhecidas no mundo JavaScript para gerenciar git hooks, mas uma alternativa poderosa, eficiente e fácil de usar tem ganhado destaque: Lefthook.
Neste tutorial, você aprenderá:
- O que é o Lefthook e por que ele é uma alternativa ao Husky.
- Como configurar o Lefthook em um projeto Node.js.
- Integrar o Conventional Commits para garantir mensagens de commit padronizadas.
- Criar uma configuração prática para automatizar verificações e garantir qualidade no seu fluxo de commits.
O que é o Lefthook e Por que Escolher Ele?
O Lefthook é uma ferramenta para gerenciar git hooks, como o Husky, mas oferece algumas vantagens significativas:
- Performance Superior: Ele é mais rápido que o Husky, especialmente em projetos maiores.
- Configuração Simples e Flexível: O Lefthook usa um único arquivo YAML para configurar seus hooks, o que facilita a manutenção.
- Multiplataforma: Suporte nativo a Windows, Linux e macOS.
- Execução em Paralelo: Ele permite rodar tarefas paralelamente, reduzindo o tempo de execução.
Por que trocar o Husky pelo Lefthook?
Embora o Husky seja amplamente usado, ele introduz dependências no package.json
e scripts adicionais, o que pode complicar a configuração em equipes ou ambientes CI/CD. O Lefthook, por outro lado, funciona fora do package.json
, mantendo seu projeto mais limpo.
O legal é que o Lefthook funciona para qualquer stack de projeto desde que você tenha o NodeJS instalado.
Como configurar o Lefthook?
Instalando o Lefthook
Instale o lefthook no seu projeto:
pnpm add -D @evilmartians/lefthook
Configurando o Lefthook
Crie o arquivo de configuração lefthook.yml
na raiz do seu projeto:
# lefthook.yml
pre-commit:
parallel: true
commands:
lint:
run: npm run lint
test:
run: npm run test
commit-msg:
commands:
conventional-commit:
run: npx commitlint --edit $1
Este exemplo define um hook de pre-commit que roda tarefas de lint e testes.
Configura um hook de commit-msg para verificar se a mensagem segue o Conventional Commits.
Caso você ainda não consegue o padrão de conventional commits, sugiro que acesso esse link.
Mas basicamente é uma forma padronizada de colocar mensagens nos commits, tornando o processo de commit padronizado e organizado. Além de contar com ferramentas para fazer bump de versão e geração de CHANGELOG
baseado em commits.
Instalando os Hooks
Execute o comando abaixo para instalar os hooks no repositório:
npx lefthook install
Esse comando fará com os hooks do git sejam instalado.
Nota: o projeto deve estar dentro de um repositório git.
Configurando o Conventional Commits
Adicione o Commitlint e as dependências necessárias:
pnpm add -D @commitlint/{config-conventional,cli}
Adicione um arquivo de configuração chamado commitlint.config.js
na raiz do seu projeto:
module.exports = {
extends: ['@commitlint/config-conventional'],
};
Adicione um script no package.json para facilitar a execução manual do Commitlint:
"scripts": {
"lint:commit": "commitlint --from=HEAD~1"
}
Automatizando e Garantindo Qualidade
Agora que configuramos o Lefthook e o Commitlint, toda vez que você fizer um commit:
- O Lefthook rodará as verificações configuradas antes de finalizar o commit.
- O Commitlint validará se sua mensagem de commit está no formato correto.
Exemplo de conventional commit:
feat: adicionar funcionalidade de login
- Implementa autenticação via JWT.
- Adiciona testes para a funcionalidade.
BREAKING CHANGE: A API agora requer autenticação em todas as rotas.
Se a mensagem não seguir o formato esperado, o commit será rejeitado.
Agora toda vez que você executar git commit -m ...
o Lefthook executará o pre-commit para validar se o seu commit está seguindo as convenções.
Conclusão
Com o Lefthook e o Conventional Commits, você eleva o padrão de qualidade do seu projeto Node.js, garantindo commits bem formatados e processos automatizados. Além disso, ao substituir o Husky pelo Lefthook, você obtém ganhos de performance e simplicidade na configuração.
Que tal começar a usar o Lefthook hoje mesmo? Experimente e compartilhe sua experiência!
Top comments (0)