我有几个任务,在内部使用grunt-shell执行各种CLI命令。
我想隐藏这些CLI命令打印到输出控制台的某些日志。
我试着用grunt-reporter来做这个,但是无法让它正常工作。
Gruntfile.js
reporter: {
shell:{
options: {
tasks: ['shell'],
header: false
}
}
}发布于 2017-02-08 11:53:30
--简短的答案.-- grunt-reporter本身不可能隐藏由grunt-shell命令生成的日志。
长答案,包括解决办法.来自grunt-shell命令的日志是由grunt-shell/bash命令本身生成的,而不是通过节点包/脚本生成的。显示在示例主页上的grunt-reporter正在截取/操作写到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) tasksrc/js/a.jssrc/js/b.jssrc/js/c.jsDone.
把头藏起来..。
利用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.jssrc/js/b.jssrc/js/c.jsDone.
即使在将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也会隐藏任何错误。
https://stackoverflow.com/questions/42076249
复制相似问题