2014-05-05 27 views
0

作为我们Grunt构建的一部分,我们将一些打印脚本代码转换为几个单独的文件,然后连接所得到的javascript以及所有其他javascript代码。不幸的是,我无法获得文件名的动态组合以与grunt-concat一起工作。在grunt-concat构建步骤中包含动态生成的文件名

这是我们Gruntfile的相关片段 - 请参见generatedTypeScriptFiles上的部分,该部分不起作用。

var jsfiles = [ 
    'js/external_libraries/inherit.js', 
    'js/external_libraries/modernizr.js', 
    'js/baz.js' 
]; 


grunt.initConfig({ 
    gitinfo : {}, //will be populated with values from Git 
    options : { 
    "packageName"   : nconf.get("name"), 
    "frameworkVersion" : nconf.get("version"), 
    "frameworkOutputPath" : nconf.get("frameworkOutputPath"), 
    "workerOutputPath" : nconf.get("workerOutputPath"), 
    "sourceMapPath"  : nconf.get("sourceMapPath") 
    }, 

    typescript : { 
    foo: { 
     src  : ['js/Foo/*.ts'], 
     dest : 'generated/Foo.js', 
    }, 
    bar : { 
     src  : ['js/Bar/*.ts'], 
     dest : 'generated/Bar.js', 
    } 
    }, 

    generatedTypeScriptFiles : { 
    all : function() { 
     var tsf = []; 
     for (var key in this.typescript) { 
     if(this.typescript[key].dest) { 
      tsf.push(this.typescript[key].dest); 
     } 
     } 
     return tsf; 
    }() 
    }, 

    scriptfiles : { 
    hybrid : function() { 
     return jsfiles.concat('<%= generatedTypeScriptFiles.all %>'); 
    }(), 
    web : function() { 
     return jsfiles.concat('<%= generatedTypeScriptFiles.all %>'); 
    }() 
    } 

    concat : { 
    web : { 
     options : { 
     separator : ';', 
     }, 
     src  : '<%= scriptfiles.web %>', 
     dest : '<%= options.frameworkOutputPath %>' 
    } 
    } 
} 

我猜测,我们的情况下,我们确实知道在我们的打字稿构建步骤中的所有结果的文件名,我们可以只建立了事前的文件名 - 的grunt.initConfig之外。这应该能解决问题,对吧?还是有另一种方式?

回答

0

也许我误解了这个问题或者你正在尝试做什么,但是为什么你不把所有.js文件从“generated”目录中整理出来呢? 像这样:

var jsfiles = [ 
    'js/external_libraries/inherit.js', 
    'js/external_libraries/modernizr.js', 
    'js/baz.js', 
    'generated/*.js' 
]; 
grunt.initConfig({ 
    typescript : { 
    foo: { 
     src  : ['js/Foo/*.ts'], 
     dest : 'generated/Foo.js', 
    }, 
    bar : { 
     src  : ['js/Bar/*.ts'], 
     dest : 'generated/Bar.js', 
    } 
    }, 
    concat : { 
    web : { 
     options : { 
     separator : ';', 
     }, 
     src  : jsFiles, 
     dest : '<%= options.frameworkOutputPath %>' 
    } 
    } 
}); 
+0

这绝对是一个有效的解决方案。再想一想,我想知道的是,如果在Grunt构建的一个步骤中有一种构建值的方法,并在稍后的阶段/步骤中使用这些值。这是一个比我问的更普遍的问题,所以我想我原来的问题的措辞有些不幸。 – oligofren

+0

当然,您可以在一个任务中将它们存储在配置对象(grunt.config.set)中,然后在另一个任务中检索它们。这里有更多的信息:http://gruntjs.com/api/grunt.config – Creynders

+0

再次看看你的代码后,我认为出错是'generatedTypeScriptFiles.all'没有被替换,对吧?这是因为模板函数没有被调用,但你可以手动完成:http://gruntjs.com/api/grunt.template – Creynders

相关问题