Как запустить две задачи эликсира в последовательности?
Посмотрите на этот код:
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');
});