Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to prompt user for input in any grunt task?

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?

like image 342
mbeasley Avatar asked May 19 '13 04:05

mbeasley


People also ask

How to prompt a user for input using a batch script?

Call the function of the Batch script. In our example, we created a function named MYPING. On the notepad application, create a Batch script named TEST. Here is the script result. Congratulations! You are able to prompt a user for input using a Batch script function.

How to prompt for user input in PowerShell?

PowerShell offers the support of Read-Host cmdlet to prompt for user input in PowerShell. This post aims to describe the possible way to prompt user input in PowerShell. How to Prompt for User Input in PowerShell? PowerShell supports a wide range of cmdlets to automate various tasks. The Read-Host cmdlet is used to prompt user input in PowerShell.

What is user input in Python?

User Input. Python allows for user input. That means we are able to ask the user for input. The method is a bit different in Python 3.6 than Python 2.7. Python 3.6 uses the input () method. Python 2.7 uses the raw_input () method.


2 Answers

It'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.com/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
        }
      ]
    }
  },
},
})
like image 118
Glen Selle Avatar answered Oct 19 '22 15:10

Glen Selle


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.

like image 26
Allan Kimmer Jensen Avatar answered Oct 19 '22 15:10

Allan Kimmer Jensen