Подтвердить что ты не робот

Как принудительно запускать вызовы gulp для синхронного запуска?

Я хочу, чтобы приведенные ниже вызовы gulp выполнялись синхронно, один за другим. Но они не следуют порядку.

Модуль run-sequence node здесь не помогает, так как я не пытаюсь запускать задачи gulp последовательно (т.е. имеет синтаксис аналогично gulp.task("mytask", ["foo", "bar", "baz"] и т.д.), а скорее gulp "вызывает" последовательно, как показано ниже.

gulp.task("dostuff", function (callback) {

  gulp
    .src("...")
    .pipe(gulp.dest("...");

  gulp
    .src("...")
    .pipe(gulp.dest("...");

  gulp
    .src("...")
    .pipe(gulp.dest("...");

  callback();
});

Как заставить их запускать один за другим?

4b9b3361

Ответ 1

Вы можете использовать async как поток управления для ваших вызовов, чтобы получить их только в одной задаче, также избегая вас, чтобы получить "эффект пирамиды". Итак, что-то вроде этого должно быть полезно для вашего прецедента:

var async = require('async');

gulp.task('yeah', function (cb) {
  async.series([
    function (next) {
      gulp.src('...')
        .pipe(gulp.dest('...')
        .on('end', next);
    },
    function (next) {
      gulp.src('...')
        .pipe(gulp.dest('...')
        .on('end', next);
    },
    function (next) {
      gulp.src('...')
        .pipe(gulp.dest('...')
        .on('end', next);
    }
  ], cb);
});

Это также позволит вам обрабатывать некоторые ошибки и лучше ориентироваться в случае возникновения проблемы.

Ответ 2

Ну, это просто потоки, чтобы вы могли слушать конечное событие (Остерегайтесь пирамиды гибели!)

gulp.task("dostuff", function (callback) {

  gulp
    .src("...")
    .pipe(gulp.dest("..."))
    .on('end', function () {

      gulp
        .src("...")
        .pipe(gulp.dest("..."))
        .on('end', function () {

          gulp
            .src("...")
            .pipe(gulp.dest("..."))
            .on('end', callback);

        });
    });
});

Но это, вероятно, лучший шаблон для разбивки его на несколько задач, каждый из которых зависит от предыдущего.

Ответ 3

последовательность выполнения:

Запускает последовательность задач gulp в указанном порядке. Эта функция предназначен для решения ситуации, когда вы определили порядок выполнения, но не используйте или не можете использовать зависимости.

npm install -save-dev run-sequence

// runSequence will ensure this task will run the following tasks in the listed order
gulp.task('things-to-do', callback => runSequence(
    'clean-up-workspace',
    'copy-new-files',
    'lint',
    'minify',
    'do-laundry',
    'cook-dinner',
    'bath-cat',
    callback
));

https://www.npmjs.com/package/run-sequence

Ответ 4

Используйте синхронный режим для glob

Затем верните результат gulp.src:

gulp.task('render', function() {
    var appJsFiles = _.map(glob.sync('src/**/*.js'), function(f) {
        return f.slice(6);
    });
    // Render the file.
    return gulp.src('src/template.html')
        .pipe(template({
            scripts: appJsFiles,
            styles: ['style1.css', 'style2.css', 'style3.css']
        }))
        .pipe(gulp.dest(config.build_dir));
});

Ответ 5

вы можете добавить что-то подобное после последнего канала

.pipe(gulp.dest(FINAL_DEST))
.on('end', () => gulp.src(['build']) .pipe(clean()))