在grunt任务完成后运行命令?

时间:2014-11-28 05:41:32

标签: gruntjs

我希望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。这可能吗?

2 个答案:

答案 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-execgrunt-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。此函数将为新任务请求新的回调包装器。