FrontenderMagazine / handling-sync-tasks-with-gulp-js

Handling Sync Tasks with Gulp JS
http://cameronspear.com/blog/handling-sync-tasks-with-gulp-js/
0 stars 0 forks source link

Комментарии #1

Open FMRobot opened 10 years ago

robhrt7 commented 10 years ago

Берите https://github.com/OverZealous/run-sequence и не заморачивайтесь.

lexey111 commented 10 years ago

Хорошая статья, спасибо. Хочу только посоветовать одну замечательную библиотеку - https://www.npmjs.org/package/run-sequence, которая предназначена именно для сложных последовательностей. У меня в проекте были случаи, когда задачи надо не только запускать параллельно/последовательно, но они при этом ещё могли и запускаться отдельно и с другими зависимостями, так что простое включение зависимости не помогало. А эта библиотека здорово выручила, хотя, конечно, есть много и других путей.

Вот пример вызова:

var runSequence = require('run-sequence'); return runSequence('clean', ['js', 'media', 'localize'], 'collect_garbage', callback);

выполнит clean, затем параллельно js, media, localize, а потом collect_garbage.

SilentImp commented 10 years ago

Или https://www.npmjs.org/package/gulp-sync Но вот только gulp умеет это все из коробки. Тогда зачем?

iamstarkov commented 10 years ago

Присоединюсь к вопросу от @SilentImp и также добавлю, что с релизом gulp@4.0.0 система менеджемента тасков обретёт новую жизнь и станет ещё круче

dmaslov commented 10 years ago

Еще можно добиться синхронности выполнения таким образом:

var afterTask = function(){
  gulp.src(...)
    .pipe(...)
    .pipe(gulp.dest(...));
};

gulp.task('some-task', function() {
  gulp.src(..)
    .pipe(...)
    .pipe(gulp.dest(...))
    .on('end', afterTask);
});
iamstarkov commented 10 years ago

фу-фу так делать, событие end не для этого. надо использовать run-sequence для красивой синхронной очереди тасков. Если хотите на ваниле всё сделать, то можно и по обычному

// task мета-таск, так как будет ждать depTask, который, в свою очередь будет ждать anotherDepTask
gulp.task('first', ['depTask']);

// deptask будет ждать anotherDepTask
gulp.task('depTask', ['anotherDepTask'], function() {…});

// task без зависимостей
gulp.task('depTask', ['anotherDepTask'], function() {…});
t3kkitz commented 10 years ago

Больше нравится строить последовательности тасков через run-sequence:

var runSequence = require('run-sequence');
gulp.task('build', function(callback) {
    runSequence('clean-build',
        'images',
        'css',
        'html',
        ['copy-images','copy-fonts'],
        callback);
});
r3b-fish commented 10 years ago

Поддерживаю первый комментарий. run-sequence решает задачи без головной боли.

p.s. кэпа: не юзайте gulp.run(), т.к. он уже deprecated.

Leikam commented 9 years ago

Похоже зависимости вызывают зависимости :) И это я не про gulp, а про то, что вроде бы зачем подключать что-то, что уж есть в коробке.

delch commented 9 years ago

Подскажите, а как орзанизовать правильный callback после выполнения таска, не создавая для этого нового таска ? К примеру у меня gulp-jade после обработки каждого файла выдает notification и по нескольку раз перезагружает livereload?!

Пример таска: gulp.task 'jade', -> gulp.src paths.views .pipe plumber errorHandler: notify.onError "Error: <%= error.message %>" .pipe jade pretty: true .pipe gulp.dest paths.app .pipe connect.reload() .pipe notify message: "jade task complete" open: "http://localhost:#{config.port}"

Denis535 commented 9 years ago

А нельзя просто дождаться конца потока? var stream = gulp.src(...)...; stream.waitForEnd();