2016-02-08 76 views
4

給定一個tsconfig文件,然後使用命令行來TSC TSC,一切工作,因爲它應該。然而,使用gulp-typescripttsconfig.json和指定outFile產生不同的輸出順序 - 我的問題是,我無法找到一個辦法,一飲而盡產生相同的JavaScript作爲TSC一樣。打字稿輸出順序 - 一飲而盡等效採用tsconfig.json

我們的構建工作流程是基於一飲而盡;但tsc是黃金標準,具有很好的手錶功能,並具有廣泛的工具支持(例如http://dev.ivogabe.com/using-vscode-with-gulp-typescript/)。如果我能讓我們的基於吞吐量的構建工作與tsc相同,那將是非常棒的。

tsconfig.json實施例:

{ 
    "compilerOptions": { 
    "declaration": false, 
    "preserveConstEnums": true, 
    "outFile": "out/out.js", 
    "sourceMap": true, 
    "target": "es5", 
    "noEmitOnError": true 
    }, 
    "exclude": [ 
    "node_modules", 
    "out" 
    ] 
} 

gulpfile.js

"use strict"; 
var gulp = require('gulp'); 
var typescript = require('gulp-typescript'); 

var tsProject = typescript.createProject('tsconfig.json'); 

gulp.task('typescript:compile', function() { 
    var tsResult = tsProject.src() 
     .pipe(typescript(tsProject)); 

    return tsResult.js.pipe(gulp.dest('out')); 
}); 
gulp.task('default', ['typescript:compile']); 

再次,我的問題是,tsc與上述tsconfig.json;和gulp與上述gulpfile.jstsconfig.json(使用gulp-typescript)產生用於的打字原稿文件一個非平凡目錄不同的輸出順序。開發人員應該能夠在兩種構建過程之間任意切換,並確信他們不會錯過輸出訂購錯誤。

我不明白用於tscgulp-typescript的輸出排序規則之間的差異,所以我一直無法爲這個問題創建一個簡單的repro例子。但理想情況下,使用tsconfig項目時gulp-typescript將使用與tsc相同的順序。

我可以用一種「子進程」 .exec調用TSC解決這個問題,但gulp-typescript具有更好的融合,一飲而盡;我還打算使用任何其他的直接調用打字稿編譯器的gulp插件(並使用tsconfig.json項目文件),但我一直無法找到它。

回答

4

我的問題是,TSC確實

打字稿有一個內部實現有序的,通過做它,我無法找到一個大口的方式來產生相同的javascript:

  • 在命令行中傳遞的文件的順序。如果你是tsconfig,這是不相關的。
  • 檢測文件的順序。由於您使用tsconfig將開始在第一個文件,然後通過referencesimport指示命令等。

注意:這是而不是可用於API消費者(如吞嚥)。此外,這可能導致問題,即使只有tschttps://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md

因此,使用外部模塊:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

這裏是一個快速入門:https://basarat.gitbooks.io/typescript/content/docs/quick/browser.html

+0

我們使用的模塊,但仍有訂購TSC和咽之間的差異-typescript - 我認爲你的觀點是,如果你正確地使用模塊和導入,順序應該沒有關係。我同意這一點,但仍然不希望由於訂購方面的差異而容易出現奇怪的錯誤。我瞭解使用outFile的缺點 - 實際情況是單個js文件對於庫和SPA代碼來說是可取的。這聽起來像一個選項是明確列出tsconfig.json文件中的所有文件 - 這看起來不太理想,但應該有助於構建一致性。 – crimbo