DEV Community

Cover image for Melhorando seus commits com lefthook e conventional commits
CodeInit
CodeInit

Posted on • Edited on

Melhorando seus commits com lefthook e conventional commits

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á:

  1. O que é o Lefthook e por que ele é uma alternativa ao Husky.
  2. Como configurar o Lefthook em um projeto Node.js.
  3. Integrar o Conventional Commits para garantir mensagens de commit padronizadas.
  4. 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.

Dica: Como criar um projeto NodeJS

Como configurar o Lefthook?

Instalando o Lefthook

Instale o lefthook no seu projeto:

pnpm add -D @evilmartians/lefthook
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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}
Enter fullscreen mode Exit fullscreen mode

Adicione um arquivo de configuração chamado commitlint.config.js na raiz do seu projeto:

module.exports = {
  extends: ['@commitlint/config-conventional'],
};
Enter fullscreen mode Exit fullscreen mode

Adicione um script no package.json para facilitar a execução manual do Commitlint:

"scripts": {
  "lint:commit": "commitlint --from=HEAD~1"
}
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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)