I'm attempting to use Grunt to make a directory in a project for new posts to a blog. It would essentially create a directory inside of a posts
directory that is named YYYYMMDDDD-PostNameInPascalCase
.
In order to do this, I'd have to prompt the user for post name each time that I execute the task. I know that grunt-init prompts users for creating projects from project templates, but I'm curious if there's a way to do this inside the Gruntfile.js
file for an already established project.
Any thoughts?
I'm attempting to use Grunt to make a directory in a project for new posts to a blog. It would essentially create a directory inside of a posts
directory that is named YYYYMMDDDD-PostNameInPascalCase
.
In order to do this, I'd have to prompt the user for post name each time that I execute the task. I know that grunt-init prompts users for creating projects from project templates, but I'm curious if there's a way to do this inside the Gruntfile.js
file for an already established project.
Any thoughts?
Share Improve this question asked May 19, 2013 at 4:06 mbeasleymbeasley 4,8745 gold badges30 silver badges39 bronze badges 3- you mean on any any? like asking you for input before running something like grunt-contrib-pass? – a Commented May 19, 2013 at 10:12
- @a Yup - exactly. I have a feeling I'm wishing here. Even if it required modifying a specific task though, that'd be okay too. – mbeasley Commented May 19, 2013 at 12:21
- Latest docs, with alternatives to create "dynamic tasks" gruntjs./frequently-asked-questions#dynamic-alias-tasks – Uyric Commented Nov 9, 2021 at 17:35
2 Answers
Reset to default 13It's been a while since this question was last asked, but there is a project on Github that attempts to do what the questioner was looking for. It's called grunt-prompt
and here's the url: https://github./dylang/grunt-prompt. It's basically a way to integrate prompts into the Gruntfile. From the project readme you would do something like:
grunt.initConfig({
prompt: {
target: {
options: {
questions: [
{
config: 'config.name', // arbitray name or config for any other grunt task
type: '<question type>', // list, checkbox, confirm, input, password
message: 'Question to ask the user',
default: 'value', // default value if nothing is entered
choices: 'Array|function(answers)',
validate: function(value), // return true if valid, error message if invalid
filter: function(value), // modify the answer
when: function(answers) // only ask this question when this function returns true
}
]
}
},
},
})
Yes, you can do something like this:
grunt.registerTask('makePost', 'Make a new post dir.', function(n) {
if (n == null) {
grunt.log.warn('Post name must be specified, like makePost:PostNameGoesHere.');
}
// Run other tasks here
grunt.task.run('foo:' + n, 'bar:' + n, 'baz:' + n);
});
For more infomation and source on how to pass some arguments look at the Grunt FAQ.