2013-03-07 8 views
32

在我們的項目中,我們使用RequireJS作爲模塊加載器。我們的一些模塊將影響全局庫,因此將它們是否在引用的模塊中可以直接使用TypeScript:編譯刪除未引用的導入

例:

define(['definitely/goingto/usethis/','just/referencingthis/forpackaging'], function(useThis) { 
    useThis.likeIPromised(); 

    // the following call can only be made when the second required file is available 
    someGlobalAvailableVariable.someMethod(); 
}); 

在JavaScript寫我的模塊時,此按預期工作。但是,我們正在逐步將我們的項目轉換爲TypeScript。鑑於上面的例子中,這導致:

import useThis = module("definitely/goingto/usethis/"); 
import whatever = module("just/referencingthis/forpackaging"); 

useThis.likeIPromised(); 

// I've written a definition file so the following statement will evaluate 
someGlobalAvailableVariable.someMethod(); 

和編譯這給JavaScript時,編譯器希望是有幫助的,並刪除任何未使用的導入。因此,這會破壞我的代碼,導致第二個導入的模塊不可用。

我目前的解決辦法是包括一個冗餘的任務,但這種相貌醜陋:

import whatever = module("just/referencingthis/forpackaging"); 
var a = whatever; // a is never ever used further down this module 

有誰知道,如果有可能配置打字稿編譯器編譯期間不優化模塊?

/// <amd-dependency path="just/referencingthis/forpackaging" /> 
+0

我假設你不能將導入移動到適當的模塊? – Fenton 2013-03-07 13:29:21

+2

他們在適當的模塊。我的項目主要由小部件組成。每個小部件都打包在自己的模塊中。我正在使用Handlebars進行模板設計,並希望將結果視圖與我的小部件定義文件一起打包。引用這樣的視圖時,它會在全局變量'Handlebars'上公開一個同名的方法。因此,我不需要參考模塊,因爲它會爲我定義方法。 – thomaux 2013-03-07 13:54:12

回答

7

一個更好的解決方案(與TS 1.8測試):

import 'just/referencingthis/forpackaging'; 

AMD的依賴性三重

26

你可以在你的文件(而不是import)的頂部做到這一點如果有其他需要導入,斜槓指令似乎只能工作;只有amd-dependency指令纔會導致TypeScript編譯器在沒有模塊定義的情況下完全生成JavaScript。

+0

哇!不知道這個功能,謝謝! – thomaux 2013-03-08 06:53:00

+0

同意,希望它被記錄 – JasonS 2013-06-26 01:53:40

+0

非常有幫助,謝謝。 – Tarion 2014-09-13 23:52:20