2016-07-07 3 views
4

typescriptファイルを複数のoutFileにグループ化することはできますか?私はまだTypescriptをバンドルしたいが、一つのJSファイルにはバンドルしたくない。TSをいくつかのJSファイルにグループ化したい。 controllers.js、plugins.js。 TypeScriptプロジェクトオプションは、outfileオプションを1つしか提供していないようです。typescriptファイルを複数のoutFileにグループ化する

+2

あなたはガルプや兵卒のようなビルドツールでこれを行うことができるかもしれないが、あなたは持っていない限り、あなたが複数の 'outFile'sを持つことはできませんグループごとに異なる 'tsconfig' – Quill

答えて

0

残念ながら、これはデフォルトのTypeScriptコンパイラの動作ではありません。私はTypeScriptアプリケーションをモジュール化しようとしたとき、この問題に直面しました。再び古き良き_references.tsファイルを使用して

  1. スタート:

    私はその問題のために使用することを決定したソリューション。

  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;

B。ガルプタスクのすべてを連結します。

//... 
 

 
     // 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

応答に時間を割いてくれてありがとう。うん、私は1つのjsにコンパイルしないことを考えていましたし、ポストコンパイルイベントを使ってさまざまなフォルダにxcopyしてからバッチして縮小してみました。 – MarzSocks

関連する問題