Adicionando automaticamente linting de pré-confirmação do Git com Grunt

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 hookmeupe o gancho de pré-confirmação será copiado para o diretório .git / hooks.

Por último, você pode automatizar isso executando grunt hookmeupquando um npm installfor concluído, usando um postinstallscript em seu arquivo package.json.

"scripts": {
"postinstall": "grunt hookmeup"
}

Quando você ou outro desenvolvedor em seu projeto executa npm installo gancho de pré-confirmação será adicionado ao diretório .git / hooks. Quando você o git commitseu 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.