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ě.