链接gulp任务和传递变量

时间:2014-03-17 02:15:57

标签: node.js gulp

我试图建立一个gulp任务,在连接它们之前将我的javascript文件排序到正确的顺序。

这意味着1->获得已安装的凉亭组件,2->将组件分类为包含顺序,3->将排序的文件数组传递给concat方法。

到目前为止,我已经管理了这个

var gulp = require('gulp');
var dependency_orderer = require('dependency-orderer');
var exec = require('child_process').exec;

var bower_list, depend_array, js_depend_array;
gulp.task('order-dependencies',['get-bower-list'], function(){
    console.log(bower_list);
 //   depend_array = dependency_orderer(bower_list);
    //console.log(depend_array);
//    return depend_array;
});

gulp.task('get-bower-list', function(){
    exec('bower list -p', function(err, stdout, stderr){
        if(err) return console.log(err);
        bower_list = stdout;
        console.log(bower_list);
        return bower_list;
    });

});
gulp.task('concat-files',['order-dependencies'], function(){


});

但问题是,我似乎无法在bower_list任务中获得order-dependencies

有关如何完成此任务的任何建议?

1 个答案:

答案 0 :(得分:2)

您的问题是任务完成而不等待您进行的异步调用(exec(...))。因此,当您在第二个任务中读取变量时,变量仍为undefined

尝试使用回调来定义任务何时结束

gulp.task('get-bower-list', function(done){
    exec('bower list -p', function(err, stdout, stderr){
        if(err) return console.log(err);
        bower_list = stdout;
        console.log(bower_list);
        return done();
    });
});

您还可以使用promises来定义任务“完成”的时间

请参阅API docs