Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically pass arguments to grunt task?

I have a grunt task that calls other grunt tasks. I want to call a subtask with programmatically determined arguments. Is this possible? I spent some time digging around the lib/grunt.js and lib/grunt/task.js, but couldn't figure it out.

I'm using grunt-compass with the following arguments specified in Gruntfile.js:

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

I want to be able to override them at runtime:

tasks/my-task.js:

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

For reference:

$ grunt --version
grunt-cli v0.1.6
grunt v0.4.0rc6
like image 977
Nick Heiner Avatar asked Feb 08 '13 20:02

Nick Heiner


People also ask

How do I pass a parameter to a grunt task?

Another way to share a parameter across multiple tasks would be to use grunt. option . In this example, running grunt deploy --target=staging on the command line would cause grunt. option('target') to return "staging".

Is grunt deprecated?

grunt. util. _ is deprecated and we highly encourage you to npm install lodash and var _ = require('lodash') to use lodash .

How do I run a grunt command in Visual Studio code?

The most recen update to VSC has auto-detects grunt (and gulp tasks) so you can now just use cmd+p then type task (notice the space at the end) and VSC will show you the available tasks to run. Show activity on this post. You can also modify the existing tasks option to add specific tasks to run in your build.


2 Answers

I figured it out. Use the <%= %> syntax in Gruntfile.js:

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

Then you can set it in your task:

grunt.config.set('myTask.src', getSrc()); 
like image 125
Nick Heiner Avatar answered Sep 28 '22 08:09

Nick Heiner


You can edit all the Grunt config:

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

Just before run the task. But your solution is "cleaner".

like image 41
Thomas Decaux Avatar answered Sep 28 '22 08:09

Thomas Decaux