过滤grunt任务的输出

时间:2017-02-06 20:00:26

标签: gruntjs

我有几个grunt任务,内部使用grunt-shell来执行各种CLI命令。

我想通过这些CLI命令隐藏打印到输出控制台的某些日志。

我尝试使用grunt-reporter但无法使其正常工作。

Gruntfile.js

reporter: {
            shell:{
                options: {
                    tasks: ['shell'],
                    header: false
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

简短回答...... grunt-reporter本身无法隐藏grunt-shell命令生成的日志。

包含解决方法的长答案... grunt-shell命令的日志由shell / bash命令本身生成,而不是通过节点包/脚本生成。 grunt-reporter主页上显示的examples正在拦截/操纵写入stdout的节点包中的消息。

考虑以下内容......

简单的要点

module.exports = function(grunt) {

    grunt.initConfig({

        shell: {
            listFiles: {
                command: 'ls src/js/*.js'
            }
        }
    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', [
        'shell:listFiles'
    ]);
};

通过CLI运行$ grunt输出如下内容:

  

Running "shell:listFiles" (shell) task

     

src/js/a.js

     

src/js/b.js

     

src/js/c.js

     

Done.

隐藏标题...

利用grunt-reporter(最好是这个场景),使用配置隐藏标题,如下所示:

module.exports = function(grunt) {

    grunt.initConfig({

        reporter: {
            shell: {
                options: {
                    tasks: ['shell:listFiles'],
                    header: false      
                }
            }
        },

        shell: {
            listFiles: {
                command: 'ls src/js/*.js'
            }
        }

    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', [
        'reporter:shell', //<-- Note: The reporter task is called first.
        'shell:listFiles'
    ]);

};

通过CLI运行$ grunt现在将输出类似的内容(注意:标题已被隐藏,但ls命令中的日志仍然存在,因为它直接来自bash / shell命令)

  

src/js/a.js

     

src/js/b.js

     

src/js/c.js

     

Done.

即使将suppress: true添加到reporter选项后,ls命令中的路径记录仍然存在。

解决方法

我认为从CLI命令隐藏日志的唯一方法是将输出消息重定向到'grunt-shell'命令中的/dev/null

module.exports = function(grunt) {

    grunt.initConfig({

        reporter: {
            shell: {
                options: {
                    tasks: ['shell:listFiles'],
                    header: false,

                }
            }
        },

        shell: {
            listFiles: {
                command: 'ls src/js/*.js > /dev/null' //<-- redirect the output messages
            }
        }

    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', [
        'reporter:shell', //<-- Note: The reporter task is called first.
        'shell:listFiles'
    ]);

};

此时,通过CLI运行$ grunt会成功隐藏消息/日志并仅报告:

  

Done.

注意:添加> /dev/null只会重定向消息/日志,并且会继续报告任何错误。使用> /dev/null 2>&1也会隐藏任何错误。