GruntJS可配置的首次运行

时间:2014-02-05 12:07:30

标签: javascript node.js angularjs gruntjs

我正在开发一个Angular演示应用程序,我希望自动化很多东西。

它是某种类型的样板,虽然它更复杂,我想制作一个配置文件,我们将放置API密钥和其他东西,我希望Grunt在用户交互时填充该文件该项目首次启动。

类似的东西:

grunt build - 它应该直接在控制台中询问用户API密钥,这些密钥将插入配置文件中,我将为整个App定义一些全局常量。

Grunt是否有这样的功能示例?

1 个答案:

答案 0 :(得分:1)

您可以使用以下方式处理提问:

https://github.com/dylang/grunt-prompt

这是一个很好的小插件,可以完成一项工作并且做得很好。它将您在命令行中输入的任何值放入变量中:(示例)

prompt: {
    target: {
      options: {
        questions: [
          {
            config: 'key', // arbitrary name or config for any other grunt task
            type: 'input', // list, checkbox, confirm, input, password
            message: 'What is your API key?',
            default: '', // default value if nothing is entered
            when: function(answers) { return !grunt.file.exists('config.yml'); } // only ask this question when this function returns true
          }
        ]
      }
    }
  }

然后,您可以使用Grunt.file函数将这些值写入文件:

http://gruntjs.com/api/grunt.file#grunt.file.write

要编排它,您需要创建一个自定义任务:(示例)

grunt.registerTask("my_config_task", function (arg) {
  var key = arg || grunt.config('key');

  grunt.file.write("config.yml", key);
});

grunt.registerTask('build', ['prompt', 'my_config_task']);

写作可能需要改进,我想,您需要替换值并组织为yml文件或json对象等...

在查看grunt-bump的来源时找到了一种可能的解决方案。他们在做什么是将配置文件解析为JSON对象:

https://github.com/darsain/grunt-bumpup/blob/master/tasks/bumpup.js#L128

替换他们需要的任何值(作为JSON)并用字符串化的对象覆盖文件:

https://github.com/darsain/grunt-bumpup/blob/master/tasks/bumpup.js#153

似乎运作良好。