Pular para o conteúdo
LatchkeyLatchkey home

Lefthook vs pre-commit: Gerenciadores de Hook Comparados

O Lefthook é um binário Go único e rápido que roda hooks em paralelo; o pre-commit é um framework Python com um grande registro de hooks prontos.

O Lefthook configura hooks em YAML, os roda em paralelo e é distribuído como um binário único sem dependências, o que o torna rápido e agnóstico de linguagem. O pre-commit, escrito em Python, gerencia ambientes de hook isolados e oferece um enorme ecossistema de hooks compartilháveis fixados por versão, o que é excelente para padronizar verificações entre repositórios. O Lefthook prioriza velocidade e simplicidade; o pre-commit prioriza um catálogo de hooks rico e reproduzível.

Lefthookpre-commit
RuntimeBinário Go únicoFramework Python
Ecossistema de hooksVocê define os comandosGrande registro compartilhado
ParalelismoEmbutidoLimitado
Isolamento de ambienteNãoAmbientes por hook
Melhor paraVelocidade, simplicidadeHooks compartilhados e fixados

No CI

O pre-commit brilha quando você quer um conjunto curado e fixado por versão de hooks da comunidade reaproveitados entre muitos repositórios, e tem um modo de CI limpo. O Lefthook é mais rápido e sem dependências, ideal quando você roda majoritariamente seus próprios comandos e quer paralelismo. Ambos também devem rodar no CI para que as verificações sejam impostas além dos hooks locais.

Acelere

Faça cache dos ambientes de hook (pre-commit) ou das dependências para que as verificações de CI comecem aquecidas. As verificações rodam em runners; runners gerenciados mais rápidos encurtam a execução de hook e lint.

Benchmark on your repository before choosing

Build-tool benchmarks published by vendors use repositories chosen to show a difference. Yours is the only one that matters, and both a cold and a warm measurement are needed because CI mostly runs cold.

Terminal
# cold: no cache, the CI condition
rm -rf node_modules/.cache dist && time <tool> build

# warm: the local development condition
time <tool> build

# and the one people forget: incremental after a one-line change
echo "// touch" >> src/index.ts && time <tool> build

O veredito

Querer um grande registro de hooks compartilháveis e fixados por versão, padronizados entre repositórios: pre-commit. Querer um binário rápido e sem dependências rodando seus próprios comandos em paralelo: Lefthook. Times que valorizam um catálogo de hooks compartilhado tendem ao pre-commit; os focados em velocidade tendem ao Lefthook.

Perguntas frequentes

Lefthook vs pre-commit: Hook Managers Compared?
Lefthook configures hooks in YAML, runs them in parallel, and ships as one dependency-free binary, making it quick and language-agnostic. pre-commit, written in Python, manages isolated hook environments and offers a huge ecosystem of shareable hooks pinned by version, which is excellent for standardizing checks across repos.
In CI?
pre-commit shines when you want a curated, version-pinned set of community hooks reused across many repos, and it has a clean CI mode. Lefthook is faster and dependency-free, ideal when you mostly run your own commands and want parallelism. Both should also run in CI so checks are enforced beyond local hooks.
Speed it up?
Cache the hook environments (pre-commit) or dependencies so CI checks start warm. The checks run on runners; faster managed runners shorten hook and lint execution.
Which should I choose?
Wanting a large registry of shareable, version-pinned hooks standardized across repos: pre-commit. Wanting a fast, dependency-free binary running your own commands in parallel: Lefthook. Teams that value a shared hook catalog lean pre-commit; speed-focused ones lean Lefthook.

Guias relacionados