2012-12-28 18 views
11

Pytanie: Czy istnieje sposób importować jQuery do modułu maszynopis z wykorzystaniem wsparcia AMD (przez kompilator), dlatego zawiera jQuery jako zależność?importu jQuery i innych 3rd Party maszynopis Biblioteki w postaci modułów wykorzystujących AMD

Kluczem jest uzyskanie instrukcji import, co powoduje, że moduł jest zależny w instrukcji define (patrz poniżej).

define(["require", "exports", 'dataservice', 'jquery', 'knockout'], 
    function(require, exports, __ds__, $ , ko) { 
     ... 
    } 
) 

Szczegóły: Chcę importować jQuery (i innych bibliotek 3rd Party) jako modułów maszynopis z AMD. Celem jest sprawienie, aby były wyświetlane jako zależność na liście require. Jednak jedynym sposobem na zrobienie tego TypeScript wydaje się być instrukcja import. Aby mieć import, potrzebujesz modułu do zaimportowania. Ale ... nie ma modułu jQuery do wskazania. to.

Obejścia:

  1. mogę odnieść się do .d.ts i napięcia wstępnego jQuery w main.js dla require.js, ale to oznacza, wstępne ładowanie wszystkich bibliotek 3rd party. Nie jest straszny, ale też nie idealny, ponieważ nie wykorzystuje tego, co możemy już zrobić z JavaScriptem i AMD.
  2. Mogę utworzyć moduł dla każdej biblioteki trzeciej strony i zawinąć ją, ale wtedy otrzymam coś w rodzaju $. $. Co jest jeszcze gorsze, IMO (i Irisk napisanie błędnego kodu modułu dla każdego z nich i wyjście z synchronizacji).

Na razie właśnie ładuję jquery w main.js. ale znowu, ale to jest mniej niż idealne. Musiałoby to zrobić dla dowolnej biblioteki, takiej jak nokaut, szkielet itp., Która nie ma modułu.

Jakieś lepsze sugestie lub coś, czego mi brakuje?

Aktualizacja/Wyjaśnienie:

mogę również użyć podkładek w config dla zależnościami wśród bibliotek. Ale to nadal preloads tych trzecich stron. Przykład:

require.config({ 
    baseUrl: '../', 
    paths: { 
     'jquery': 'lib/jquery-1.7.2', 
     'underscore': 'lib/underscore' 
    }, 
    shim: { 
     jquery: { 
      exports: '$' 
     }, 
     underscore: { 
      exports: '_' 
     } 
    } 
}); 
+0

Co jest warte, po prostu ładuję je wszystkie w main.js (lub moim odpowiedniku). To trochę brzydkie, ale działa. –

+0

Ken - Tak, to w zasadzie to, co robię z osobami trzecimi, wstępnie je ładując. Po prostu czujemy się brudni, gdy wiemy, że możemy zrobić to lepiej w JavaScript. –

+0

Uzgodnione. System modułów w TS nadal wydaje się trochę surowy - trochę jak reszta języka :-). Mam nadzieję, że nadchodzą ulepszenia. –

Odpowiedz

4

Jeden inne prace wokół byłoby stosować definicję typu dla requirejs i użyć własnych require oświadczenia, zamiast instrukcji import.

Wadą tego jest to, że TypeScript import może być używany z AMD lub CommonJS z samą zmianą kompilatora, więc poślubisz requirejs w swoim programie bardziej niż z import.

Istnieje istniejący definition for requirejs on Definitely Typed.

+0

dobry punkt. Mam nadzieję, że zespół TypeScript ułatwi to traktowanie/shim bibliotek zewnętrznych jako zewnętrznego modułu. –

+1

Nie sądzę, że w tym miejscu jest odpowiedź inna niż "brak wspaniałej odpowiedzi". Więc oznaczę twój jako najbliższy :) –

+0

@Steve: Czy są jakieś aktualizacje z TypeScript, które mogą rozwiązać ten problem? –

Powiązane problemy