我希望run a command但 后,任务完成了grunt。
uglify: {
compile: {
options: {...},
files: {...}
}
?onFinish?: {
cmd: 'echo done!',
// or even just a console.log
run: function(){
console.log('done!');
}
}
},
在shell中运行命令,或者甚至只能console.log
。这可能吗?
答案 0 :(得分:1)
Grunt在回调之前和之后都不支持,但是下一个版本可以实现以相同方式工作的事件,如issue #542中所述。
现在,您应该采用任务组合方式,即为操作前后创建任务,并使用新名称对其进行分组:
grunt.registerTask('newuglify', ['before:uglify', 'uglify', 'after:uglify']);
然后记得运行newuglify
而不是uglify
。
另一个选择是不对它们进行分组,但要记住将前后任务分别添加到包含uglify
的队列中:
grunt.registerTask('default', ['randomtask1', 'before:uglify', 'uglify', 'after:uglify', 'randomtask2']);
对于运行命令,您可以使用grunt-exec或grunt-shell等插件。
如果您只想打印某些内容,请尝试grunt.log。
答案 1 :(得分:1)
咕噜声有一个我见过的可怕代码之一。我不知道为什么它很受欢迎。我甚至不会把它当成一个笑话。这与“遗留代码”问题无关。它从一开始就被设计叛逃。
var old_runTaskFn = grunt.task.runTaskFn;
grunt.task.runTaskFn = function(context, fn, done, asyncDone) {
var callback;
var promise = new Promise(function(resolve, reject) {
callback = function (err, success) {
if (success) {
resolve();
} else {
reject(err);
}
return done.apply(this, arguments);
};
});
something.trigger("new task", context.name, context.nameArgs, promise);
return old_runTaskFn.call(this, context, fn, callback, asyncDone);
}
您可以使用回调+函数而不是promise + trigger。此函数将为新任务请求新的回调包装器。