如何使用grunt config的模板字符串?

时间:2015-07-17 08:35:57

标签: gruntjs

我在我的gruntfile中的module.exports顶部设置了模板:

// Self calling so we get a value.
// Expects only a single schema in the schema folder.
grunt.config.set('schemaPath', function() {
    console.log(grunt.file.expand('schema/*.json')[0]);
    return grunt.file.expand('schema/*.json')[0];
}());

console.log(grunt.config.get('schemaPath'));

稍后,在配置命令时,我想使用模板字符串,如下所示:

stripJsonComments: {
  currentSchema: {
    files: {
      'build/<%= schemaPath %>': '<%= schemaPath %>'
    }
  }
}

但是我收到了一个错误:An error occurred while processing a template (Cannot read property 'src' of undefined).在调查之后,模板字符串似乎没有展开而是被删除了。

1 个答案:

答案 0 :(得分:2)

您无法使用模板作为属性名称,因此无法获得处理。所以'build/<%= schemaPath %>': '<%= schemaPath %>'无法工作。

我建议您查看task configuration的另一个变体,您可以在其中明确定义srcdest属性,然后使用值模板。
如果您需要要查找多个src-dest文件映射,您可以使用files array format。它看起来像这样:

module.exports = function(grunt) {

  grunt.initConfig({
    concat: {
      main: {
        files: [
          {src: ['<%= file1 %>', '<%= file2 %>'], dest: '<%= destPath %>'},
        ]
      },
    }    
  });


  grunt.config.set('file1', 'foo.js');
  grunt.config.set('file2', 'bar.js');
  grunt.config.set('destPath', 'dest/baz.js');

  grunt.loadNpmTasks('grunt-contrib-concat');

  grunt.registerTask('default', ['concat']);

};