2013-03-07 21 views
32

W naszym projekcie używamy RequireJS jako naszego modułu ładującego. Niektóre z naszych modułów wpłynie bibliotek globalnych, a tym samym nie będzie bezpośrednio stosowane w module są odwołuje sięTypeScript: kompilacja usuwa import bez odwołań

. Przykład:

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(); 
}); 

To działa zgodnie z oczekiwaniami, pisząc swoje moduły w JavaScript. Jednak krok po kroku tłumaczymy nasz projekt na TypeScript. Biorąc pod uwagę powyższy przykład, skutkuje:

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(); 

I podczas kompilacji to JavaScript, kompilator chce być pomocny i usuwa wszelkie niewykorzystane import. W związku z tym powoduje to uszkodzenie mojego kodu, ponieważ drugi importowany moduł nie jest dostępny.

Moja obecna praca wokół jest włączenie redundantny zadanie, ale to wygląda brzydko:

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

Czy ktoś wie, czy jest możliwe, aby skonfigurować kompilator nie maszynopis do optymalizacji modułów podczas kompilacji?

+0

Zakładam, że nie można po prostu przenieść importu do odpowiedniego modułu? – Fenton

+2

Są one w odpowiednim module. Mój projekt składa się głównie z widgetów. Każdy widget jest spakowany we własnym module. Używam Handlebars do szablonów i chcę spakować wynikowe widoki razem z moimi plikami definicji widgetów. Odwołując się do takiego widoku, wyeksponuje on metodę o tej samej nazwie na zmienną globalną "Kierownice". Dlatego nie muszę odwoływać się do modułu, ponieważ określił on metodę dla mnie. – thomaux

Odpowiedz

7

Ładniejszym rozwiązanie (testowane z TS 1.8):

import 'just/referencingthis/forpackaging'; 

potrójną amd-zależność dyrektywa "slash" wydaje się działać tylko wtedy, gdy inne wymagają importu; tylko posiadanie dyrektyw zależnych od amd powoduje, że kompilator TypeScript generuje JavaScript całkowicie bez definicji modułu.

26

Można to zrobić na początku pliku (zamiast import):

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

Wow! Nie wiedziałem o tej funkcji, dzięki! – thomaux

+0

zgadzam się, chciałbym, żeby to było udokumentowane – JasonS

+0

bardzo pomocne, dzięki. – Tarion