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.