常见任务在GruntJS中运行一次

时间:2013-12-21 18:23:50

标签: javascript gruntjs

我想在GruntJS中有一个共同的任务,如果已经在同一个会话中由不同的任务运行,它将不会第二次运行。

例如,我有任务:

grunt.registerTask("make_win", ["prepare_dist", "copy_win", "compress_win"]);
grunt.registerTask("make_linux", ["prepare_dist", "copy_linux", "compress_linux"]);
grunt.registerTask("make", ["make_win", "make_linux"]);

现在如何运作:

  • 当调用make时,运行以下任务: prepare_dist ,copy_win,compress_win, prepare_dist ,copy_linux,compress_linux(所以,prepare_dist运行两次,但没有必要因为dist(共同基础)已经准备好了);

我想要实现的目标:

  • 调用make_win时,应运行以下任务: prepare_dist ,copy_win等;
  • 调用make_linux时,应运行以下任务: prepare_dist ,copy_linux等;
  • 调用make时,应运行以下任务: prepare_dist ,copy_win,compress_win,copy_linux,compress_linux(因此,跳过prepare_dist,因为已经运行);

2 个答案:

答案 0 :(得分:3)

创建一个回调作为任务,在任务检查中run是否为真:

grunt.registerTask('foo', 'A sample task that runs once.', function() {
  if (!run) {
    grunt.task.run('bar');
    run = true;
  }
});

答案 1 :(得分:0)

嗯......我明白你想要什么,我认为这是一个很好的想法,但我认为Grunt没有任何东西可以做到这一点。不幸的是,我认为唯一的方法就是将任务分开一点:

grunt.registerTask("make_win_specific", ["copy_win", "compress_win"]);
grunt.registerTask("make_linux_specific", ["copy_linux", "compress_linux"]);

grunt.registerTask("make_win", ["prepare_dist", "make_win_specific"]);
grunt.registerTask("make_linux", ["prepare_dist", "make_linux_specific"]);

grunt.registerTask("make", ["prepare_dist", "make_win_specific", "make_linux_specific"]);