O gulp.js é um utilitário incrível para muitas coisas. Recentemente, comecei a usar o gulp como ferramenta de compilação para a próxima reformulação do blog, quando isso acontecer. No passado, eu escrevia meus próprios scripts de compilação, mas eles rapidamente ficavam confusos e eu tinha problemas com tarefas simultâneas e em saber quando cada uma delas estava concluída. O gulp.js tornou meu código de compilação mais bonito, mas ainda me deparo com problemas de tempo devido a tarefas assíncronas.


É claro que a natureza do JS está se tornando assíncrona, mas, às vezes, eu só quero um processo de compilação “de cima para baixo” – é aí que o run-sequence entra em cena. Com a sequência de execução, posso agrupar facilmente as tarefas para garantir que elas sejam concluídas antes de iniciar outras tarefas!


run-sequence funciona passando argumentos na forma de matrizes ou strings; uma matriz significa que as tarefas podem ser executadas simultaneamente, uma string significa uma única tarefa:



var runSequence = require('run-sequence');

gulp.task('some-task', function() {
	runSequence(
		['task-1', 'task-2', 'task-3'], // These 3 can be done in parallel
		'task-4', // ...then just do this
		['task-5', 'task-5'], // ...then do these things in parallel
		'task-6', // ...then do this
		// ....
	);
});


Cada argumento sucessivo aguarda a conclusão da(s) tarefa(s) anterior(es). A tarefa padrão do arquivo de compilação do gulp do meu futuro tema tem a seguinte aparência:



// Create the default run action, which should be the entire build
gulp.task('default', function() {
	runSequence(
		['copy-js-dir', 'copy-php-files', 'copy-image-files', 'compile-stylus'],
		'clone-prism',
		['minify-css', 'minify-js'],
		'replace-build-ids',
		'create-backup-zip',
		'move-to-wordpress'
	);
});


Os puristas do JavaScript vão me odiar por não criar minhas próprias promessas para evitar a necessidade de sincronização e execução de sequência, mas, para ser honesto, não me importo. Adicionar minhas próprias promessas tornaria o código mais confuso e com poucos benefícios de velocidade.


Às vezes, temos que fazer concessões em prol da manutenção – todos os desenvolvedores sabem disso. run-sequence foi uma concessão que fiz para manter meu código sustentável e lógico em minha própria cabeça.