如何按顺序运行两个长生不老药任务

How to run two elixir tasks in sequence?

本文关键字:两个 长生不老 任务 何按 顺序 运行      更新时间:2023-09-26

看看这个代码:

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。但是版本控制失败了,因为文件还没有出现。

p.S.在运行gulp之前,请执行mkdir 1 && touch 1/1.js。每次跑步前做rm {2,3}/1.js

这里的问题是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');
});