在grunt中设置属性是创建一个不需要的json对象

时间:2013-08-30 16:44:24

标签: javascript gruntjs

我正在尝试使用命令grunt.config(<property>, <value>)在grunt中设置属性,并且grunt不会转义属于我的属性名称的句点.,并将其转换为新的json对象。我正在循环一个项目列表并创建一个较少文件的列表。这是代码。

grunt.config('projects').forEach(function(project) {
  grunt.config('less.development.files.' + project + '.less', 'project/' + project + '.css');
});

我希望结果是一个json对象,其键和一个css值较小,如project.less : project.css

这给了我一个看起来像这样的json对象

{
  "file1": {
    "less": "project\/file1.css"
  },
  "file2": {
    "less": "project\/file2.css"
  },
  "file3": {
    "less": "project\/file3.css"
  }
}

如果我将文件名从.less更改为_less,那么该对象看起来就像我想要的那样。

{
  "file1_less": "project\/file1.css",
  "file2_less": "project\/file2.css",
  "file3_less": "project\/file3.css",
}

但我希望它是.less。我该怎么做才能使Grunt不将其创建为新对象?我尝试过双引号,单引号,带引号的单引号,并将键/值推入变量名并使用变量。这些都没有奏效。有没有人有任何其他想法?谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这应该有效:

grunt.config('projects').forEach(function(project) {
  grunt.config.data.less.development.files[project + '.less'] = 'project/' + project + '.css';
});

基本上,您希望使用带有.less的连接字符串作为键,以便您可以使用方括号表示法直接通过grunt.config.data.less.development.files对象访问它。

假设您已经有一个占位符,如:

grunt.config.init({
  less:{
    development:{
      files:[]
    }
  }
})