2016-01-28 157 views
0

我不知道這是否可能之前編譯打字稿,但分流。說我有兩套打字稿源文件,我想咕嘟咕嘟編譯:咕嘟咕嘟 - 串聯

var gulp = require('gulp'); 
var typescript = require('gulp-typescript'); 

var appSource = "./app/**/*.ts"; 
var packageSource = "./mypackage/**/*.ts"; 

gulp.task("build", function() { 
    return gulp.src([appSource, packageSource]) 
      .pipe(typescript()) 
}); 

我想編譯所有的打字稿在一起,但隨後在原有基礎上的來源,這樣我可以分別將它們連接起來分裂輸出並出現了兩個文件:

app.js 
mypackage.js 

mypackage的是一種延伸到主應用程序,並可以在以後的時間被延遲加載,但打字稿編制將只與所有源的工作文件一起。

回答

0

mypackage的是一種延伸到主應用程序的,並且可以 延遲加載在稍後的時間,但打字稿編譯將 只有在所有的源文件工作一起。

這是沒有必要真正編譯在一起。編譯與所有源文件一起工作的原因是因爲它正在構建您的「Mypackage」時查找您的主應用程序中所做的所有類型定義。

來處理這個正確的方法是編譯的兩個步驟。

  1. 編譯主應用程序並打印生成聲明文件。
  2. 使用從主應用程序創建的類型聲明編譯「Mypackage」。這將允許typescript編譯器在編譯Mypackage時查找它需要的所有類型。

下面的代碼示例顯示了一個類似的用例,我首先編譯我的腳本並從它們生成類型聲明,然後編譯我的規範。

var gulp = require('gulp'); 
var ts = require('gulp-typescript'); 
var merge = require('merge2'); 
var sourcemaps = require('gulp-sourcemaps'); 
var runSequence = require('run-sequence'); 

gulp.task('compilescripts', function() { 
    var tsScriptsProject = ts.createProject('scripts/tsconfig.json'); 
    var tsResult = tsScriptsProject.src('**/*.ts') 
     .pipe(sourcemaps.init()) 
     .pipe(ts(tsScriptsProject)); 
    return merge([ 
     tsResult.dts.pipe(gulp.dest('')), 
     tsResult.js.pipe(sourcemaps.write()).pipe(gulp.dest('')) 
    ]); 
}); 

gulp.task('compilespecs', function() { 
    var tsSpecProject = ts.createProject('spec/UnitTests/tsconfig.json'); 
    var tsResult = tsSpecProject.src('**/*.ts') 
     .pipe(ts(tsSpecProject)); 
    return tsResult.pipe(gulp.dest('')); 
}); 

gulp.task('compileall', function (done) { 
    runSequence('compilescripts', 'compilespecs', done); 
}); 

下面是我的編譯腳本tsconfig.json。

{ 
    "compilerOptions": { 
     "noImplicitAny": true, 
     "removeComments": true, 
     "preserveConstEnums": true, 
     "noEmitOnError": true, 
     "sourceMap": true, 
     "declaration": true, 
     "outFile": "dev-build/scripts/typesharp.js", 
     "target": "es5", 
     "suppressImplicitAnyIndexErrors": true 
    } 
}