2016-07-07 52 views
4

是否可以将打字稿文件分组为多个outFile?我仍然希望捆绑我的Typescript,但不是将其包含到单个JS文件中,我想将我的TS分组为几个JS文件,例如controllers.js,plugins.js。 TypeScript项目选项似乎只提供一个outfile选项。组打字稿文件分成多个outFile

+2

您也许能像咕嘟咕嘟或咕噜构建工具来做到这一点,但你不能有多个'outFile's除非你有一个不同的'tsconfig'为每个组 – Quill

回答

0

不幸的是,这并不是默认的TypeScript编译器行为。当我试图模拟TypeScript应用程序时,我自己面临这个问题。

的解决方案,我已经决定利用这个问题:

  1. 开始使用好老_references.ts再次文件。
  2. 不要使用TSC进行绑定(只需编译为JavaScript)。
  3. 使用Gulp插件/函数解析_references.ts文件。我的想法:

var fs = require('fs'); 
 

 
// Consts 
 
var PLUGIN_NAME = 'reference-parser'; 
 

 
// Plugin level function (dealing with files) 
 
function referenceParser(fileName, prefix, filterParentReferences) { 
 
    var references = []; 
 

 
    var content = fs.readFileSync(fileName, 'utf8'); 
 
    content = content.replace(/\/\/\/ <reference path=("|')/g, prefix); 
 
    content = content.replace(/.ts("|')\s*\/>,?/g, '.js'); 
 

 
    function readLines(input) { 
 
     if (input.length === 0) 
 
      return; 
 

 
     var newLineIndex = input.indexOf('\r\n'); 
 
     if (newLineIndex >= 0) { 
 
      var line = input.substring(0, newLineIndex).trim(); 
 

 
      readLine(line); 
 

 
      if (input.length > (newLineIndex + 2)) 
 
       readLines(input.substring(newLineIndex + 2)); 
 
     } else { 
 
      readLine(input); 
 
     } 
 
    } 
 

 
    function readLine(line) { 
 
     if (line && line.length > 0) { 
 
      //console.log('Line: ' + line); 
 

 
      if (line.startsWith('//')) { 
 
       //console.log('Comment line, ignored.'); 
 
      } else if (line.indexOf('_references.ts') >= 0) { 
 
       //console.log('External reference line, ignored.'); // TODO Support this? 
 
      } else if (filterParentReferences && line.startsWith('../')) { 
 
       //console.log('Parent reference, ignored.'); 
 
      } else { 
 
       references.push(line); 
 
      } 
 
     } 
 
    } 
 

 
    readLines(content); 
 
    return references; 
 
} 
 

 
// Exporting the plugin main function 
 
module.exports = referenceParser;

湾在咕嘟咕嘟任务串连一切:

//... 
 

 
     // Get module source files by parsing the module's _references.ts file. 
 
     var sourceFiles = referenceParser(sourceRoot + '_references.ts', buildJsRoot, true); 
 
     // console.log(sourceFiles); 
 
     var sourcesStream = gulp 
 
      .src(sourceFiles) 
 
      .pipe(plugins.sourcemaps.init({ loadMaps: true })) // Load TypeScript generated source maps 
 
      .pipe(plugins.concat(module.name + '.Bundle.js')) 
 
      .pipe(plugins.uglify({ mangle: false })) // Minify the resulting bundle 
 
      .pipe(plugins.sourcemaps.write('.')) // Write the (merged) bundle source maps 
 
      .pipe(gulp.dest(destinationRoot)); 
 
     moduleGulpStreams.add(sourcesStream); // Add the source stream to the stream merger 
 

 
//...

+0

感谢您花时间回复。是的,我一直在考虑不编译到一个js,然后使用后编译事件xcopy到各种文件夹,然后批量和缩小。 – MarzSocks