2013-06-16 16 views
15

Jest to bardziej ogólne pytanie, dlaczego i kiedy wymagany jest program wymagający skryptu Typescript. Zrobiłem trochę pracy z requireJs przed i zawsze użyłem skryptu kompilacji r.js przed wdrożeniem. Rozumiem, że skrypt budujący, który scala wszystkie pliki js (moduły), ma na celu zmniejszenie ilości żądań http i oczywiście umożliwia modularyzację kodu.Maszynopis, dlaczego i kiedy potrzebny jest program Requjs.

Moje pytanie jest takie: Od maszynopis już zapewnia łatwy sposób oddzielania kodu na moduły, dlaczego nie połączyć wynikowe pliki js, zamiast dodatkowego kroku korzystania requirejs do obsługi modułów? Jeśli pracuję nad większymi projektami, rozumiem, że wszystkie js nie powinny być ładowane na raz, ale zakładam, że w dalszym ciągu moduł byłby w pewien sposób łączony.

Edit: A dokładniej: Dlaczego użytku requireJs zarządzania moje modułów, a nie tylko trzymać się maszynopis wewnętrzne moduły, które jak zrozumiałem mogą być również ładowane przy starcie. Moduły wewnętrzne a moduły zewnętrzne oparte na amd i requirejs.

+0

Dlaczego miałbyś * zakładać, że * oba są potrzebne? Jak w, kto powiedział ci, aby użyć obu? Wygląda na to, że w ogóle można o to zapytać. Jeśli wszystko, co używasz requirejs, to tworzenie minifikowanego uberjsa, to oczywiście jest zbędne. – millimoose

Odpowiedz

1

W opisanym przypadku użycia nie powinno być potrzebneJS, ponieważ nie trzeba ręcznie łączyć wynikowych plików js. Kompilator maszynopisów może to dla ciebie zrobić. Możesz podać opcję dla polecenia tsc. Spowoduje to skompilowanie wszystkich plików .ts i wygenerowanie pojedynczego pliku wyjściowego JavaScript. Umożliwia to podzielenie kodu na moduły w osobnych plikach .ts przy użyciu słowa kluczowego module i scalenie ich w celu zoptymalizowanego wdrożenia.

Możesz zmienić format modułu z eksportowanego z TypeScript na AMD. Do załadowania tych modułów konieczne będzie wymaganie JSJ. Istnieją również wtyczki dla RequireJS, które wykonują dodatkowe czynności poza modułami ładującymi, np. asynchronizowanie ładowanie plików tekstowych

+0

Dziękuję - wiem o parametrze --out używanym z kompilatorem. Co jest domyślnym ustawieniem przy użyciu flashdevelop, który obsługuje również maszynopis. Ale większość tutoriali, w tym pluralsight http://bit.ly/10ovDqb, nigdy nie wyjaśnia, dlaczego istnieje potrzeba requireS. Tak więc każdy przykład lub użycie, gdy wymagany jest requirejs, jest w zasadzie tym, czego szukam. - jeszcze raz dzięki – ddennis

+0

Możesz zmienić format modułu z eksportowanego z TypeScript na AMD. Do załadowania tych modułów konieczne będzie wymaganie JSJ. Istnieją również wtyczki dla RequireJS, które wykonują dodatkowe czynności poza modułami ładującymi, np. asynchronizuj ładowanie plików tekstowych. –

2

Jeśli załadujesz tylko jeden plik JS podczas pageload, nie będziesz potrzebował wymagać JS.
Potrzebujesz needJS, jeśli masz wiele plików js i jeśli chcesz je załadować nie w index.html, ale podczas wykonywania skryptu. Będą one ładowane asynchronicznie i tylko raz. Kod po wymaganiu skryptu jest wykonywany dopiero po załadowaniu wymaganego skryptu. Może to być szczególnie przydatne w przypadku leniwego ładowania, gdy nie masz pewności, czy moduł będzie w ogóle wymagany przez użytkownika.
Inną korzyścią jest to, że zależność modułów jest zdefiniowana w każdym module, ponieważ każdy moduł, który potrzebuje innego modułu do pracy, może zawierać odpowiednie "wymagane" -Zmiany.

+0

Dzięki - Moje pytanie nie tyle dotyczy requireJS, z którym pracowałeś i rozumiesz. Zmieniłem to pytanie i starałem się być bardziej konkretny. – ddennis

7

Jedynym powodem, dla którego zdecydujesz się użyć RequireJS do uruchomienia swojego programu TypeScript w przeglądarce, byłoby posiadanie setek modułów, ale strona może potrzebować tylko dwóch lub trzech, aby wykonać swoje działania. Mówimy tutaj o poważnych dużych programach, a nie o lekkich aplikacjach lub dodatkowych funkach dla strony internetowej.

Korzystanie z RequireJS dla naprawdę dużej aplikacji oznacza, że ​​ładujesz tylko te skrypty, których naprawdę potrzebujesz - nie wszystko na wszelki wypadek.

Dla przykładu, wyobraź sobie, że napisałeś Microsoft Office jako program TypeScript, możesz użyć RequireJS do załadowania potrzebnych rzeczy. Z początku więc załadowałeś to, czego potrzebujesz do eksploracji plików, a kiedy plik został wybrany, spowodowałoby załadowanie tego modułu (może Word) wraz z jego zależnościami. Może to oznaczać, że pobrałeś tylko 10% programu w kilku małych porcjach.

kontenerowe Ładowarki

maszynopis nie posiada własnego modułu ładującego. Kompiluje TypeScript w JavaScript, konwertując instrukcje importu modułów do kodu stylu CommonJS lub AMD. Asynchronous Module Definition (AMD) to format modułu używany przez RequireJS. Moduły CommonJS są używane przez NodeJS. Należy korzystać z tych modułów, niezależnie od tego, czy używasz TypeScript, czy JavaScript.

maszynopis po prostu zamienia to:

import myModule = module('mymodule'); 

do żadnej require lub define oświadczenia zgodnie z § 10.4 TypeScript Language Specification.

+0

Doceniam twoją odpowiedź - dzięki. Wiem, że problem wymaga, aby Js pomógł nam rozwiązać, dlatego użyjemy programu ładującego moduły, jak requireJs w zwykłym js. Ale nie sądzę, że odpowiedziałeś na moje pytanie, dlaczego używasz RequJs do zarządzania moimi modułami, a nie tylko trzymam się maszynopisowych modułów wewnętrznych, które jak zrozumiałem mogą być ładowane w czasie wykonywania. – ddennis

+0

@ddennis Dodałem notatkę na ten temat. Zasadniczo TypeScript nie ma wbudowanego modułu ładującego moduły, ale obsługuje zarówno moduły ładujące moduł CommonJS, jak i AMD. – Fenton

+0

@Sohnee, w jaki sposób requirejs współpracuje z aplikacją z wieloma menu, a każde menu ma własne pliki ts i zależności, a kliknięcie menu powoduje załadowanie tylko wymaganego pliku. Czy jest jakiś zasób, którego mogę się nauczyć? Ten sam przykład, o którym wspomniałeś w swojej odpowiedzi. Przeczytałem o requirejs ale przykłady były małe aplikacje tylko dla wersji demonstracyjnej. –

Powiązane problemy