59 votes

Comment exécuter deux tâches de surveillance en même temps

Est-il possible d'exécuter deux de regarder des tâches à la fois?

Je comprends que je peux avoir n'importe quel nombre de tâches que je veux à l'intérieur de la montre de paramètres et de lancer grunt regarder et on veillera à ce que tous d'entre eux, comme ceci

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

...mais je n'ai pas besoin de cela. Je veux juste que les différentes tâches de développement et de production. Comme vous pouvez le deviner, la seule différence entre Un (production) et B (développement) est minification et la concaténation. Je n'ai pas besoin de lancer Une et B tâches en même temps.

D'abord je suis venu avec cette idée

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

Mais cela n'a pas fonctionné. La première fois que regarder des tâches de travail (C ne fonctionne jamais). Est-ce possible de faire ce que je veux?

74voto

Nicolas Hery Points 298

J'ai trouvé en utilisant des œuvres grunt-simultanées :

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

Ensuite:

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

18voto

RobW Points 2202

EDIT: simultanées a maintenant un logConcurrentOutput option! Plus d'infos ici: https://github.com/sindresorhus/grunt-concurrent#logconcurrentoutput.

Watch est un étrange simultanées mais le blocage de la tâche, de sorte que vous devez être créatif pour obtenir multitâche comme la fonctionnalité de travail.

Simultanées perd toute sortie de la montre tâches, ce qui n'est pas l'idéal.

Essayez dynamiquement par écrit l'objet de config dans une tâche personnalisée:

grunt.registerTask('watch:test', function() {
  // Configuration for watch:test tasks.
  var config = {
    options: {
      interrupt: true
    },
    unit: {
      files: [
        'test/unit/**/*.spec.coffee'
      ],
      tasks: ['karma:unit']
    },
    integration: {
      files: [
        'test/integration/**/*.rb',
        '.tmp/scripts/**/*.js'
      ],
      tasks: ['exec:rspec']
    }
  };

  grunt.config('watch', config);
  grunt.task.run('watch');
});

12voto

jmcollin92 Points 192

La meilleure et la seule solution qui fonctionne est là: https://npmjs.org/package/grunt-focus Ajoutez ce plugin puis:

 focus: {
            sources: {
                include: ['js', 'html', 'css', 'grunt']
            },
            testu: {
                include: ['js', 'html', 'css', 'testu', 'grunt']
            },
            testi: {
                include: ['js', 'html', 'css', 'testu', 'testi', 'grunt']
            }
        },
        watch: {
            js: {
                files: paths.js,
                tasks: ['jshint'],
                options: {
                    livereload: true
                }
            },
            html: {
                files: paths.html,
                options: {
                    livereload: true
                }
            },
            css: {
                files: paths.css,
                tasks: ['csslint'],
                options: {
                    livereload: true
                }
            },
            testu: {
                files: ['test/**/*.js', 'test/**/*.css'],
                tasks: ['mochaTest'],
                options: {}
            },
            testi: {
                files: ['test/**/*.js', 'test/**/*.css'],
                tasks: ['exec:cleanTestDB', 'protractor_webdriver', 'protractor'],
                options: {}
            },
            grunt: {
                files: ['Gruntfile.js', 'server/config/env/*.js'],
                options: {
                    reload: true
                }
            }
        }
 

Ensuite, vous utilisez focus: sources ou focus: testu à votre convenance.

JM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X