Usar o gancho pré-commit do Git junto com Grunt.js permite que você execute linting em seu código antes que ele seja confirmado. Isso pode ajudar sua equipe a manter um estilo de codificação específico.
Vale a pena ler sobre ganchos de commit do Git e Grunt.js se você ainda não o fez.
Um gancho de pré-confirmação normalmente precisa ser copiado / escrito manualmente em .git / hooks nas máquinas dos desenvolvedores. Em vez disso, o Grunt, com uma pequena ajuda do npm, pode ajudar a automatizar o processo.
Seu gancho de pré-confirmação do lint seria parecido com este
#!/bin/sh
#
# Pre-commit hooks
# Lint stuff before committing
grunt jshint
Você precisará npm install
grunt-contrib-clean e grunt-shell . As seguintes tarefas do Grunt removerão o executável de gancho de pré-confirmação atual (se houver) e, em seguida, copiarão o executável de pré-confirmação do projeto para .git / hooks.
// Clean stuff up
clean: {
// Clean any pre-commit hooks in .git/hooks directory
hooks: ['.git/hooks/pre-commit']
},
// Run shell commands
shell: {
hooks: {
// Copy the project's pre-commit hook into .git/hooks
command: 'cp git-hooks/pre-commit .git/hooks/'
}
}
Você precisará incluir as tarefas e então elas podem ser vinculadas a uma única tarefa, neste caso chamada hookmeup
.
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-shell');
// Clean the .git/hooks/pre-commit file then copy in the latest version
grunt.registerTask('hookmeup', ['clean:hooks', 'shell:hooks']);
Agora você pode executar grunt hookmeup
e o gancho de pré-confirmação será copiado para o diretório .git / hooks.
Por último, você pode automatizar isso executando grunt hookmeup
quando um npm install
for concluído, usando um postinstall
script em seu arquivo package.json.
"scripts": {
"postinstall": "grunt hookmeup"
}
Quando você ou outro desenvolvedor em seu projeto executa npm install
o gancho de pré-confirmação será adicionado ao diretório .git / hooks. Quando você o git commit
seu código será mais linter. Se o linting falhar, o commit também falhará.
A mesma configuração também pode ser usada para executar testes, concatenação, minimização etc. O módulo npm pré-comprometimento do gancho de Nathan LaFreniere oferece uma boa configuração para linting e teste com o gancho Git pré-comprometimento.
Obrigado ao codeinthhole e Andreas Köberle por fornecer excelentes artigos sobre como trabalhar com ganchos Git.