2015-08-18 3 views
2

У меня есть глобальная задача, которая должна запускать в последовательности (синхронно) некоторые подзадачи. Я использовал механизм зависимостей выполнения задачи, чтобы справиться с этим «синхронной» логикой:Задачи Gulp - Выполнение последовательности без зависимостей

// main task 
gulp.task('deploy', ['build', 'upload', 'extract', 'migrate'], function() { 
    // task returns a stream 
}); 

// sub tasks 
gulp.task('migrate', ['extract'], function() { 
    // task returns a stream 
}); 

gulp.task('extract', ['upload'], function() { 
    // task returns a stream 
}); 

gulp.task('upload', ['build'], function() { 
    // task returns a stream 
}); 

gulp.task('build', [], function() { 
    // task returns a stream 
}); 

Зависимости хорошо работает и работать все в порядке. Но теперь, как я могу позвонить migrate без выполнения extract>upload>build. Потому что, иногда я хочу позвонить вручную:

gulp build 
gulp upload 
gulp extract 

И я не хочу каждую задачу повторно запустить все зависимость ...

Благодаря

+2

https://github.com/OverZealous/run-sequence, похоже, справляется с этой логикой, но мне кажется странным, что глоток не может справиться с этим распространенным случаем использования (или, может быть, я думаю, что «хрюкать» слишком много) –

ответ

0

В конце концов, run-sequence плагин делает действительно хорошо работу:

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

// main task 
gulp.task('deploy', [], function() { 
    runner(
     'build', 
     'upload', 
     'extract', 
     'migrate' 
    ); 
}); 

// sub tasks 
gulp.task('migrate', ['extract'], function() { 
    // task returns a stream 
}); 

gulp.task('extract', ['upload'], function() { 
    // task returns a stream 
}); 

gulp.task('upload', ['build'], function() { 
    // task returns a stream 
}); 

gulp.task('build', ['clean:build'], function() { 
    // task returns a stream 
}); 

gulp.task('clean:build', [], function() { 
    // task returns a stream 
}); 

Таким образом, я могу самостоятельно вызвать любую подзадачу без повторного выполнения предыдущих subtaks ...

0

То, что я сделал, это определить (2) версии каждой задачи, которую я хочу изолировать, но попросите их вызвать ту же логику, чтобы я не повторялся.

Например, в моем текущем проекте у меня есть задача e2e-tests-development, которая зависит от build-development, которая строит как сервер, так и клиент перед запуском тестов e2e. Иногда я просто хочу повторно запустить тесты и не перестроить все приложение.

Мой e2e-tests-development.js файл выглядит примерно так:

var gulp = require('gulp'); 
// Omitted... 

gulp.task('e2e-tests-development', 
    ['build-development'], 
    _task); 

gulp.task('e2e-tests-development-isolated', 
    [], // no dependencies for the isolated version of the task. 
    _task); 

function _task() { 
    // Omitted... 
} 

И, очевидно, вы бы вызвать gulp с e2e-tests-development-isolated вместо e2e-tests-development, если вы хотите просто запустить эту задачу.

(Конечно, что gulp действительно нуждается является --no-depedencies флаг из командной строки ...)

0

если вам нужно 2 версии подход, как я, следующее решение будет делать:

gulp.task('deploy:build', ['build'], function() { 
    gulp.start('deploy'); 
} 

Теперь я могу вызвать развертывание без зависимости от сборки.

Смежные вопросы