在这个示例grunt插件中,我想在每次“左”或“右”任务完成时发送咆哮通知。
然而,目前一切都没有发生。
我错过了什么?
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
notify: {
left: {
options: {
title: 'Left Leg Down',
message: 'go'
}
},
right: {
options: {
title: 'Right Leg Down',
message: 'go'
}
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-notify');
// Tasks
grunt.registerTask('default', ['walk', 'notify']);
grunt.registerTask('left', function(){});
grunt.registerTask('right', function(){});
grunt.registerTask('walk', function(){
//grunt.task.run();
var done = this.async();
var leg = 'left';
var intervalID = setInterval(callSwitch, 1000);
function callSwitch(){
if (leg == 'left') {
grunt.task.run('left');
grunt.log.write('left...');
leg = 'right';
} else {
grunt.task.run('right');
grunt.log.write('right...');
leg = 'left';
}
};
grunt.log.write('walking...');
});
};
编辑 - 发布已完成的grunt文件以供参考
'use strict';
module.exports = function (grunt) {
var leg = 'left';
// Project configuration.
grunt.initConfig({
notify: {
left: {
options: {
title: 'Left Leg Down',
message: 'go'
}
},
right: {
options: {
title: 'Right Leg Down',
message: 'go'
}
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-notify');
// Tasks
grunt.registerTask('default', ['walk']);
grunt.registerTask('left', function(target){return true;});
grunt.registerTask('right', function(target){return true;});
grunt.registerTask('walk', function(target){
var done = this.async();
if (leg == 'left') {
grunt.task.run(['left', 'notify:left']);
//grunt.log.write('left...');
leg = 'right';
} else {
grunt.task.run(['right', 'notify:right']);
//grunt.log.write('right...');
leg = 'left';
}
// repeat task each minute
setTimeout(function () {
grunt.task.run('walk');
done();
}, 1000 * 5);
});
};
答案 0 :(得分:1)
哦......,抱歉我不知道您正在使用this.async()
。
notify:left
和notify:right
任务正在等待walk
任务完成,方法是调用done()
。
所以这是一个解决方案,我已经验证它是否在我的环境中按预期运行。
var leg = 'left';
grunt.registerTask('walk' , function(target){
var done = this.async();
if (leg == 'left') {
grunt.task.run(['left', 'notify:left']);
grunt.log.write('left...');
leg = 'right';
} else {
grunt.task.run(['right', 'notify:right']);
grunt.log.write('right...');
leg = 'left';
}
setTimeout(function () {
grunt.task.run('walk');
done();
}, 1000);
});
答案 1 :(得分:0)
这个怎么样?
function callSwitch(){
if (leg == 'left') {
grunt.task.run(['left', 'notify:left']); // Added notify:left
grunt.log.write('left...');
leg = 'right';
} else {
grunt.task.run(['right', 'notify:right']); // Added notify:right
grunt.log.write('right...');
leg = 'left';
}
};