如何依次运行两个灵药任务?

看看这个代码:

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 。 据推测,这意味着第二项任务从第一项任务尚未完成时开始。 有没有办法让他们一个接一个跑?

我真正想要做的是浏览我的js文件,追加一些其他文件(自定义任务)和version的结果。 但版本化失败,因为该文件还没有。

PS在运行gulp do mkdir 1 && touch 1/1.js 。 在每次运行之前,请执行rm {2,3}/1.js

这里的问题是laravel-elixir将这种任务包装成dynamic生成的任务。 包装是按顺序执行的。 但他们似乎不等到子任务完成。

所以,我能想到的最好的是:

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