在命令运行时在Grunt中显示输出?

时间:2016-04-18 01:44:26

标签: javascript node.js asynchronous gruntjs spawn

这里我没有输出,命令永远运行:

grunt.registerTask('serve', function () {
    var done = this.async();

    grunt.util.spawn({
        cmd: 'jekyll',
        args: ['serve'],
        stdio: 'inherit'
    }, function (err, res, exit_code) {
        res.stdout && console.info(res.stdout);
        exit_code && console.error(res.stderr);
        done(err);
    });
});

我想输出(并且命令一直运行直到出错或中断)。

3 个答案:

答案 0 :(得分:1)

试试这个:

grunt.registerTask('serve', function(){
    var done = this.async();

    var child = grunt.util.spawn({
       cmd: 'jekyll',
       args: ['serve']
    }, function(){
       ...
    });

    child.stdout.pipe(process.stdout);
    child.stderr.pipe(process.stderr);
});

请参阅:Grunt spawned process not capturing output

答案 1 :(得分:1)

感谢你的回答,@ Lihau-Tan接近了正确的答案。

将这个答案与我的尝试相结合,我想出了这个解决方案:

grunt.registerTask('serve', function () {
    var child = grunt.util.spawn({
        cmd: 'jekyll',
        args: ['serve', '-P', process.env.PORT || 4001],
        stdio: 'inherit'
    }, this.async());

    child.stdout.pipe(process.stdout);
    child.stderr.pipe(process.stderr);
});

答案 2 :(得分:0)

您可以使用grunt log

以下可用功能

grunt.log.write(msg)
grunt.log.writeln([msg])
grunt.log.error([msg])
grunt.log.errorlns(msg)
grunt.log.ok([msg])
grunt.log.oklns(msg)
grunt.log.subhead(msg)
grunt.log.writeflags(obj, prefix)
grunt.log.debug(msg)