Grunt替换:参数json文件

时间:2014-09-16 23:24:24

标签: javascript json gruntjs

Goodmornig,

我在gruntfile中使用grunt-replace(https://github.com/outaTiME/grunt-replace)通过从json文件加载json对象来替换html文件中的某些字符串。

我想为这种方法增加一些灵活性,并且我定制了另一个名为'setopts'的任务,它只是为grunt.option添加了一些属性,我用以下方式使用'replace'任务:

replace: {
    common: {
      options: {
        patterns: [
          {
            json: '<%=grunt.option("locales")%>'
          }
        ]
      },
      files: [
        {expand: true, flatten: true, src: ['public/sites/<%=grunt.option("domain")%>/index.html'], dest: 'public/sites/<%=grunt.option("domain")%>/'},
      ]
    }
}    

这是我的'setopts'任务:

grunt.registerTask('setopts', function (domain) {

  locales = grunt.file.readJSON('src/locales/domain/myfile.json');
  grunt.option('locales', locales);

  grunt.option('domain', domain);

}  

我执行以下任务:

grunt.registerTask('maintask',    [ 'setopts:mydomain', 'replace:common']);

经过一些尝试,我发现'replace'任务中的'files'属性工作正常,但我在'patterns'属性中出错:

处理来源......错误 警告:处理“public / sites / xxxxx / index.html”文件时出错。使用--force继续。

这有什么问题?

感谢您的任何评论!

1 个答案:

答案 0 :(得分:0)

我知道我迟到了1。5年,但也许其他人可能需要这个答案。

我实现它的方式是不使用grunt.option。相反,我使用了grunt.config.set

replace: {
    common: {
      options: {
        patterns: [
          {
            json: '<%= locales %>'
          }
        ]
      },
      files: [
        {expand: true, flatten: true, src: ['public/sites/<%= domain %>/index.html'], dest: 'public/sites/<%= domain %>/'},
      ]
    }
}   

注意locales变量用作json属性的值的方式。

这是setopts任务:

grunt.registerTask('setopts', function (domain) {

  locales = grunt.file.readJSON('src/locales/domain/myfile.json');
  grunt.config.set('locales', locales);

  grunt.config.set('domain', domain);

}  

希望它有助于某人:)

这个问题帮助我找到答案Programmatically pass arguments to grunt task?