Grunt ( http://gruntjs.com/ ) é a nossa ferramenta preferida aqui mencionada ( https://mention.com ) quando se trata de automação de tarefas.
É um executor de tarefas Javascript, oferecendo vários plug-ins agrupados para tarefas comuns, ao mesmo tempo em que é muito extensível, oferecendo a opção de escrever todos os tipos de tarefas para atender às suas necessidades. O melhor acontece quando você pode combinar tarefas para criar tarefas ainda mais poderosas!
O escopo do Grunt vai além de simplesmente automatizar tarefas relacionadas ao front-end. Nós o usamos, por exemplo, para testar continuamente em PHP enquanto desenvolvemos:
var log, terminal;
terminal = require('color-terminal');
log = function(error, stdout, stderr, cb) {
if (error) {
terminal.color('red').write(stdout);
} else {
terminal.color('green').write(stdout);
}
return cb();
};
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-shell');
grunt.initConfig({
testFilepath: null,
watch: {
php: {
options: {
event: 'changed',
spawn: false
},
files: ['foo/bar/**/*.php', 'foo/bar/**/*Test.php'],
tasks: 'shell:phpunit'
}
},
shell: {
phpunit: {
options: {
callback: log
},
command: 'echo <%= testFilepath %> && phpunit -c app <%= testFilepath %>'
}
}
});
return grunt.event.on('watch', function(action, filepath, ext) {
var regex, testFilepath;
regex = new RegExp("foo/bar/([a-z0-9]+)/([a-z0-9/]+)", "i");
if (filepath.match(regex)) {
if (filepath.indexOf('Test') === -1) {
testFilepath = filepath.replace(regex, "foo/bar/$1/Tests/$2Test");
} else {
testFilepath = filepath;
}
return grunt.config('testFilepath', testFilepath);
}
});
};
Esta tarefa simples do Grunt observa os arquivos * .php e * Test.php e executa o PHPUnit com a classe de teste correta cada vez que é modificado. Simples, mas realmente eficiente durante uma sessão de codificação intensa.
Quer saber mais? Aqui está a lista de nossas ferramentas de front-end favoritas: http://blog.mention.com/the-5-best-front-end-developer-tools/