如何在grunt任务中显示咆哮通知

时间:2014-04-11 17:32:08

标签: gruntjs growl

在这个示例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);


});


};

2 个答案:

答案 0 :(得分:1)

哦......,抱歉我不知道您正在使用this.async()notify:leftnotify: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';
        }
    };