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