我正在處理一個大型的打字稿項目。我更喜歡創建許多小類,並將它們放在單獨的文件中,並使用深層嵌套的命名空間(打字稿中的「內部模塊」)。我認爲這是一個很好的做法,因爲它鼓勵封裝,可測試性,可重用性等。我擁有超過一百個帶有深名稱空間的小型打字稿文件。跨越多個文件與js minification的Typescript內部模塊
對於每個typescript文件,編譯後的.js輸出包含每個文件的每行3個自動生成的'樣板',每個級別的名稱空間(頂部2個,底部1個)。例如,這裏是包含一個空類打字稿文件,裏面4個級別的命名空間:
module a.b.c.d {
export class MyClass {
constructor() {
}
}
}
這編譯成以下的.js:
var a;
(function (a) {
var b;
(function (b) {
var c;
(function (c) {
var d;
(function (d) {
var MyClass = (function() {
function MyClass() {
}
return MyClass;
})();
d.MyClass = MyClass;
})(d = c.d || (c.d = {}));
})(c = b.c || (b.c = {}));
})(b = a.b || (a.b = {}));
})(a || (a = {}));
出於性能考慮,我想合併/將我的.js文件縮小爲單個文件以供生產。如果我只是按照正確的順序追加文件,那麼每個文件都會重複進入和退出命名空間的樣板文件。在小的.ts文件的情況下,這將包含大量的開銷。
我的問題:是否有某種合併/縮小我的.js文件的方法,在順序.js文件共享相同名稱空間的情況下,可以剝去這些深名稱空間的樣板文件?
來優化這個問題是使用壓縮(比如說gzip)一個Github的項目 - 這種重複是很好的處理。 – Fenton
你使用任何一種構建過程?你有沒有試過在單個文件中編譯?我這樣做,但實際上從來沒有檢查過這個開銷代碼的冗餘。 –
由於命名空間的創建只運行一次,而且所有內容都只設置一次,所以開銷不應該是那麼大的問題?如果您提到的文件大小開銷可能會成爲問題,我不確定是否有簡單的解決方法。 – Nypan