33

I thought there was a way to do this, and that I'd stumbled on it before. I have read these answers but they're not what I'm talking about:

Programmatically pass arguments to grunt task?

Grunt conditional option

Accessing the process / environment from a grunt template

I also looked at the grunt docs but it isn't there:

https://github.com/gruntjs/grunt/wiki/Configuring-tasks

Is there a syntax like this?

grunt.task.run 'htmlmin:allFiles:collapseWhitespace=true'

Community
  • 1
  • 1
SimplGy
  • 20,079
  • 15
  • 107
  • 144

1 Answers1

63

You can use that syntax but it means pass these arguments to the htmlmin task: allFiles, 'collapse=true'.

For example, given the following task:

grunt.registerTask('so', function(arg1, arg2) {
   console.log(arg1 + ", " + arg2); 
}); 

Running:

grunt so:barley:test=true

Gives the following output:

barley, test=true

There are other ways to pass parameters/share info described in the faq: How can I share parameters across multiple tasks?

--Options may be applicable to you

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".

Sergio
  • 28,539
  • 11
  • 85
  • 132
dc5
  • 12,341
  • 2
  • 35
  • 47
  • The link you shared with [Dynamic Alias Tasks](http://gruntjs.com/frequently-asked-questions#dynamic-alias-tasks) Is the syntax I was looking for. It looks like each task needs to be built to accept params this way though, so it won't work in the same way for every task, and currently, not for most existing tasks. I thought it was a generic way to override options. – SimplGy Sep 04 '13 at 21:43
  • The "another way" option seems like the preferred method. I'm tempted to adjust the answer to feature both. – doublejosh Apr 03 '18 at 21:13