0

作为我们 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. 那应该可以解决问题,对吗?还是有其他方法?

4

1 回答 1

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 %>'
    }
  }
});
于 2014-05-05T13:03:47.850 回答