如何依次运行两个灵药任务?
看看这个代码:
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
。 据推测,这意味着第二项任务从第一项任务尚未完成时开始。 有没有办法让他们一个接一个跑?
我真正想要做的是浏览我的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'); });