web-dev-qa-db-fra.com

Passer par programme des arguments à une tâche grognante?

J'ai une tâche de grognement qui appelle d'autres tâches de grognement. Je veux appeler une sous-tâche avec des arguments déterminés par programme. Est-ce possible? J'ai passé un peu de temps à fouiller dans les lib/grunt.js et lib/grunt/task.js, mais je n'ai pas pu le comprendre.

J'utilise grunt-compass avec les arguments suivants spécifiés dans Gruntfile.js:

compass: {
  default_options: {
    src: 'components/201',
    dest: 'build',
    require: ['zurb-foundation']
  }
}

Je veux pouvoir les remplacer lors de l'exécution:

tâches/ma-tâche.js:

// simplified example
module.exports = function(grunt) {
  grunt.registerTask('foo', 'bar', function() {
    var chooseDest = doWork();
    grunt.task.run('compass', {src: 'src', dest: chooseDest});
  });
};

Pour référence:

$ grunt --version
grunt-cli v0.1.6
grunt v0.4.0rc6
46
Nick Heiner

Je l'ai compris. Utilisez le <%= %> syntaxe dans Gruntfile.js:

compass: {
  default_options: {
    src: 'components/<%= myTask.src %>',
    dest: 'build',
    require: ['zurb-foundation']
  }
}

Ensuite, vous pouvez le définir dans votre tâche:

grunt.config.set('myTask.src', getSrc());
58
Nick Heiner

Vous pouvez éditer toutes les configurations de Grunt:

grunt.config('compass.default_options.src', 'blabla');

Juste avant d'exécuter la tâche. Mais votre solution est "plus propre".

3
Thomas Decaux