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

Include dynamically generated filenames in grunt-concat build step

本文关键字:动态 文件名 包含 grunt-concat 构建      更新时间:2023-09-26

作为Grunt构建的一部分,我们正在将一些typescript代码编译到几个单独的文件中,然后将生成的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之外。这应该能解决问题,对吧?还是有别的办法?

也许我误解了问题或您想做的事情,但为什么不从"生成"目录中全局化所有.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 %>'
    }
  }
});