2016-07-07 18 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