从 grunt 任务执行节点命令

execute a node command from a grunt task

我有一个 g运行t 任务,我想从中 运行 一个节点命令。当我 运行 命令时,该命令没有给出任何错误,但我期待任务的一些控制台输出,我似乎根本没有得到。

为了运行这个节点任务我错过了什么?

grunt.registerTask('asyncfoo', 'My "asyncfoo" task.', function() {
    // Force task into async mode and grab a handle to the "done" function.
    var done = this.async();
    // Run some sync stuff.
    grunt.log.writeln('Processing task...');


    grunt.util.spawn({ cmd: 'node', args: ['S3ListBuckets.js']});

    // And some async stuff.
    setTimeout(function() {
        grunt.log.writeln('All done!');
        done();
    }, 1000);
});

!-- 如果其他人想做类似的事情,这里是代码

module.exports = function(grunt) {
    grunt.registerTask('asyncfoo', 'My "asyncfoo" task.', function() {
    // Force task into async mode and grab a handle to the "done" function.
    var done = this.async();
    // Run some sync stuff.
    grunt.log.writeln('Processing task...');

    grunt.util.spawn({ cmd: 'node', args: ['S3ListBuckets.js'], opts: {stdio: 'inherit'}});

});

};

!-- 列出桶

var fs = require('fs');

var aws = require('aws-sdk');

aws.config.loadFromPath('./grunt-aws.json');

var s3 = new aws.S3();

s3.listBuckets(function (err, data) {
    if (err) {
    console.log("Error:", err);
   }
else {
    for (var index in data.Buckets) {
        var bucket = data.Buckets[index];
        console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
    }
}
});

答案 建议使用参数 opts: {stdio: 'inherit'} 将生成的输出流式传输到父输出流中。

同一个答案还列出了其他选择:监听数据事件,或根据需要通过管道传输流。

此外,使用超时来等待异步任务也不是一个好主意。如果您正在等待的只是生成的进程,您可以使用回调来了解它何时完成。如果您有更复杂的同步,我建议开始一个新的 Whosebug 问题。