在grunt-concat构建步骤中包含动态生成的文件名

时间:2014-05-05 10:40:58

标签: javascript gruntjs grunt-contrib-concat

作为我们Grunt构建的一部分,我们将一些打字稿代码转换为几个单独的文件,然后将生成的javascript与我们所有其余的javascript代码连接起来。不幸的是,我无法动态构建文件名以与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 %>'
    }
  }
}

我猜测,对于我们在typescript构建步骤中实际知道所有生成的文件名的情况,我们可以事先建立文件名 - 在grunt.initConfig之外。这应该解决问题,对吗?或者还有另一种方式吗?

1 个答案:

答案 0 :(得分:0)

也许我误解了这个问题或者你想要做什么,但为什么不直接从“生成”目录中发送所有.js文件呢? 像这样:

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 %>'
    }
  }
});