2015-12-12 75 views
1

這段代碼看看:如何依次運行兩個靈藥任務?

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'); 
}); 

當我取消setTimeoutconsole.log開始輸出true。據推測,這意味着第二個任務從第一個任務尚未完成時開始。有沒有辦法讓他們一個接一個跑?

我真的想要做的是browserify我的js文件,追加一些其他文件給他們(自定義任務)和version的結果。但版本化失敗,因爲該文件還沒有。

P.S.運行前gulpmkdir 1 && touch 1/1.js。並在每次運行前做rm {2,3}/1.js

回答

1

The issue這裏是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'); 
});