gruntjsgrunt-contrib-watch

How to run two grunt watch tasks simultaneously


Is it possible to run two watch tasks simultaneously?

I understand that I can have any number of tasks I want inside watch settings and just launch grunt watch and it will watch all of them, like this

...
watch: {
    A: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee", "requirejs"]
    },
    B: {
        files: "js/dev/**/*.coffee",
        tasks: ["coffee"]
    },
    C: {
        files: "js/dev/**/*.html",
        tasks: ["copy"]
    }
}
...

...but I don't need this. I just want to have different set of tasks for development and production. As you can guess, the only difference between A (production) and B (development) is minification and concatenation. I don't need to launch A and B tasks at the same time.

First I came with this idea

grunt.registerTask("prod", ["watch:A", "watch:C"]);
grunt.registerTask("dev", ["watch:B", "watch:C"]);

But this didn't work. Just first watch tasks is working (C never works). Is that possible to do what I want?


Solution

  • I've found using grunt-concurrent works:

    concurrent: {
      options: {
        logConcurrentOutput: true
      },
      prod: {
        tasks: ["watch:A", "watch:C"]
      },
      dev: {
        tasks: ["watch:B", "watch:C"]
      }
    }
    

    Then:

    grunt.registerTask("prod", ["concurrent:prod"]);
    grunt.registerTask("dev", ["concurrent:dev"]);