Synchronizujte úkoly Gulp s run-sekvencí

gulp.js je úžasný nástroj pro tolik věcí. Nedávno jsem začal používat gulp jako nástroj pro sestavení pro další redesign blogu, kdykoli to může přijít. V minulosti jsem psal své vlastní skripty pro sestavení, ale rychle se zamotaly a narazil jsem na problémy se souběžnými úkoly a vědomím, kdy je každý dokončen. gulp.js udělal můj kód sestavení hezčím, ale stále mám problémy s načasováním kvůli asynchronním úkolům.

Povaha JS se samozřejmě stává asynchronní, ale někdy chci pouze proces sestavování „shora dolů“ – tam přichází na řadu běhová sekvence.  S běhovou sekvencí mohu snadno seskupit úkoly, abych zajistil, že budou hotové, než se pustím do jiných úkolů !

run-sequence funguje tak, že předává argumenty ve formě polí nebo řetězců; pole znamená, že úkoly lze spouštět souběžně, řetězec znamená jeden úkol:

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
		// ....
	);
});

Každý následující argument čeká na dokončení předchozího úkolu (úkolů). Výchozí úloha sestavení souboru mého budoucího motivu vypadá následovně:

// 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'
	);
});

Zastánci JavaScriptu mě budou nenávidět za to, že nevytvářím vlastní sliby, abych se vyhnul potřebě synchronizace a běhové sekvence, ale abych byl upřímný, je mi to jedno. Přidáním mých vlastních slibů by byl kód chaotický a s malou výhodou rychlosti.

Někdy musíme udělat ústupky kvůli udržovatelnosti – všichni vývojáři to vědí. run-sequence byl ústupek, který jsem udělal, abych udržoval svůj kód udržitelný a logický v mé vlastní hlavě.