Как запустить две задачи эликсира в последовательности?

Посмотрите на этот код:

var elixir = require('laravel-elixir')
  gulp = require('gulp'),
  fs = require('fs');

gulp.task('t1', function() {
  return gulp.src('1/1.js')
    .pipe(gulp.dest('2'));
});

gulp.task('t2', function() {
  // setTimeout(function() {
    console.log(fs.existsSync('2/1.js'));
  // }, 100);
  return gulp.src('2/1.js')
    .pipe(gulp.dest('3'));
});

elixir(function(mix) {
    mix.task('t1').task('t2');
});

Когда я раскомментирую setTimeout, console.log начинает выводить true, Это, предположительно, означает, что вторая задача начинается, когда первая еще не закончена. Есть ли способ заставить их бежать один за другим?

Что я действительно пытаюсь сделать, так это browserify мои js-файлы, добавьте к ним некоторые другие файлы (пользовательская задача) и version результат. Но управление версиями не удается, потому что файла еще нет.

PS перед запуском gulp делать mkdir 1 && touch 1/1.js, И делать rm {2,3}/1.js перед каждым пробегом.

1 ответ

Решение

Проблема здесь в том, что laravel-elixir упаковывает задачи такого рода в задачи, созданные динамически. Обертки выполнены в последовательности. Но они, похоже, не ждут, пока подзадачи завершены.

Итак, лучшее, что я мог придумать, это:

var elixir = require('laravel-elixir');
var gulp = require('gulp');
var fs = require('fs');

elixir.extend('inlineTask', function(func, watcher) {
  var task = new elixir.Task(func.name, func);
  if (watcher) {
    task.watch(watcher);
  }
});

elixir(function(mix) {
  mix.inlineTask(function t1() {
    console.log('1 -> 2');
    return gulp.src('1/1.js')
      .pipe(gulp.dest('2'));
  }, '1/**/*.js').inlineTask(function t2() {
    console.log('2 -> 3');
    console.log(fs.existsSync('2/1.js'));
    return gulp.src('2/1.js')
      .pipe(gulp.dest('3'));
  }, '2/**/*.js');
});
Другие вопросы по тегам