2012-12-13 107 views
1

我正在開發一個項目,我想將源代碼打包到多個模塊中(在不同的文件中)。我這樣做是爲了減少整體重量,因此我只能在特定頁面上包含某些部分。TypeScript中的別名外部模塊

我遇到的問題是我找不出一個語法,它會讓我別名外部模塊,我真的不想每次都寫出完整的模塊(因爲它通常是像ABCD組織)。

當我編譯時,我有一個腳本抓取所有的文件,所以我有外部定義文件作爲第一個參數。

如果我寫出整個模塊(A.B.C.D.MyClass),它認識到。如果我嘗試做:

module MyModule { 
    import ABCD = A.B.C.D; 

    export MyClass { 
     //... 
     public myFunc(obj:ABCD.MyClass) {} 
    } 
} 

它會告訴我,'The name "ABCD" does not exist in the current scope."'

如果它的事項,我導出所有我的班,但不出口任何模塊。我生成了包含的定義文件(所以當我編譯時,包含A.B.C.D的定義文件在我的列表中是第一個)。

任何想法?

更新

要闡述我的文件結構,我有這樣的事情:

  • 一個
      • a.ts
      • b.ts
    • Ç
      • c.ts
      • d.ts

然後別處我還可以具有:

    • d
      • e.ts
      • f.ts
      • Ë
        • g.ts
        • h.ts

在這種情況下,我將建立第一集成類似AB的東西

tsc A/B/a.ts A/B/b.ts A/B/C/c.ts A/B/C/d.ts --out A.B.ts --declarations 

然後,當我去打包我會做一些這樣的未來:

tsc /path/to/A.B.d.ts A/D/e.ts A/D/f.ts A/D/E/g.ts A/D/E/h.ts --out A.D.ts --declarations 

我建立這些編譯器通過一組文件的遞歸動態命令用類似編譯它們TS我指定這樣它就可以獲得編譯器的東西。

+0

能否請你描述你的文件結構和導出定義? – Valentin

回答

1

如果您正在打包在多個文件中的模塊,以便使用AMD模塊加載模式加載它們,你需要做以下...

文件的名稱是模塊的名稱,你不再增加module聲明

例如...

module MyModule { 
    export class MyClass { 
    } 
} 

實際上應該是MyModule.ts,看起來像這樣:

export class MyClass { 
} 

你會然後使用加載它:

import my = module('MyModule'); 

我覺得目前你正在嘗試與加載的模塊式的,這是不兼容的混合的打字稿代碼捆綁風格。捆綁時,當您負責在頁面上獲取腳本時,文件名無關緊要。當您使用AMD或CommonJS時,您需要遵守文件命名規則(即文件名等於模塊名稱),並省略包含module

作爲一個側面說明,有在0.8.1.1影響這一個bug,所以你可能想通過這種閱讀,如果你是0.8.1.1:http://typescript.codeplex.com/discussions/405800

+0

我也有我使用的子模塊。在我的情況下,如果模塊是A.B.C.D,主模塊是A.B,他們都使用,我應該調用文件A.B.ts,並在文件中只有模塊C.D,或者有其他方法嗎? – samanime

+1

如果你想要一個分層模塊結構,你通常會創建一個文件夾結構並具有'A/B/C/D.ts',你可以使用'import abcd = module('./ A/B/C/D');' – Fenton

+0

因此,我創建了更大的模塊,然後將其壓縮到我可以提供的文件中。如果每個類都在它自己的文件中,那麼太多的文件將被服務。我試圖做大約50個類(每個都在它自己的文件中)到大約4個JS文件。 – samanime

相關問題