是否有可能在任何grunt任务中提示用户输入?

时间:2022-12-09 02:14:06

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.

我正在尝试使用Grunt在项目中创建一个目录,以便在博客上发布新帖子。它本质上会在posts目录中创建一个名为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.

为了做到这一点,我每次执行任务时都必须提示用户输入帖子名称。我知道grunt-init会提示用户从项目模板创建项目,但我很好奇是否有办法在已经建立的项目的Gruntfile.js文件中执行此操作。

Any thoughts?

有什么想法吗?

2 个解决方案

#1


13  

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:

自上次提出这个问题以来已经有一段时间了,但Github上有一个项目试图做提问者正在寻找的问题。它被称为grunt-prompt,这里是url:https://github.com/dylang/grunt-prompt。它基本上是一种将提示集成到Gruntfile中的方法。从项目自述文件中你可以做类似的事情:

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
        }
      ]
    }
  },
},
})

#2


1  

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.

有关如何传递一些参数的更多信息和来源,请查看Grunt FAQ。

#1


13  

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:

自上次提出这个问题以来已经有一段时间了,但Github上有一个项目试图做提问者正在寻找的问题。它被称为grunt-prompt,这里是url:https://github.com/dylang/grunt-prompt。它基本上是一种将提示集成到Gruntfile中的方法。从项目自述文件中你可以做类似的事情:

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
        }
      ]
    }
  },
},
})

#2


1  

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.

有关如何传递一些参数的更多信息和来源,请查看Grunt FAQ。