【问题标题】:How to run two elixir tasks in sequence?如何依次运行两个 Elixir 任务?
【发布时间】:2015-12-12 02:11:37
【问题描述】:

看看这段代码:

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结果。但版本控制失败,因为该文件尚不存在。

附:在运行gulp 之前执行mkdir 1 && touch 1/1.js。并在每次运行前执行rm {2,3}/1.js

【问题讨论】:

    标签: javascript node.js gulp laravel-elixir


    【解决方案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');
    });
    

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 2023-03-24
      • 2016-09-24
      • 2014-05-14
      • 2017-02-16
      • 2023-03-24
      • 2023-02-25
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多