我有几个grunt任务,内部使用grunt-shell
来执行各种CLI命令。
我想通过这些CLI命令隐藏打印到输出控制台的某些日志。
我尝试使用grunt-reporter
但无法使其正常工作。
Gruntfile.js
reporter: {
shell:{
options: {
tasks: ['shell'],
header: false
}
}
}
答案 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
也会隐藏任何错误。