2011-11-10 19 views
31

Buduję aplikację na jedną stronę przy użyciu requireJS i do tej pory ją kocham. Doszedłem do punktu, w którym rozwijałem inne części strony poza główną aplikacją i nie jestem pewien, jak (lub jeśli) używać requireJS do tego.RequireJS: Wiele main.js?

W moim głównym app wszystko jest wywoływany przez tego tagu skryptu:

<script data-main='/scripts/main' src='/scripts/libs/require.js'> 

Jestem teraz rozwijanie stronę główną, która ma własne skrypty końcowe przednie. Korzystanie z optymalizatora, jeśli chodzi o udostępnianie witryny, która połączy wszystkie te skrypty w jeden pakiet main.js. Staram się zrozumieć, gdzie reszta mojej witryny pasuje do tego.

Powiedz, że moja aplikacja jest zależna od jQuery i zostanie dołączona do zoptymalizowanej wersji aplikacji. Co zrobić, jeśli chcę użyć jQuery na stronie głównej? Nie chcę ładować aplikacji main.js mojej aplikacji, aby uzyskać dostęp do mojego modułu jQuery. Więc tak ... trochę zmieszany!


jestem wyobrażając sobie struktury witryny rodzajem tak:

/scripts 
    - app-main.js //(includes all module dependencies after optimzation) 
    - home-main.js //(includes all module dependencies after optimzation) 

App:

<script data-main='/scripts/app-main' src='/scripts/libs/require.js'> 

Strona domowa:

<script data-main='/scripts/home-main' src='/scripts/libs/require.js'> 


Pytania

  1. Jak mogę używać RequireJS rozwijać różne części witryny?
  2. Czy zalecane jest posiadanie wielu plików main.js?
  3. W jaki sposób moje różne pliki main.js mogą współdzielić wspólne moduły, takie jak optymalizacja postu jQuery?
+1

bym wytrzymać więcej odpowiedzi na ten temat. Porywam się z "układaniem" moich plików require.js przez posiadanie wielu połączeń wymagających(). Działa dobrze, ale szukam pomysłów, jak kontrolować zamówienie bez używania modułów/coffeescript ... –

+0

Ta dyskusja okazała się przydatna do udostępniania konfiguracji na wielu stronach: https://github.com/jrburke/requirejs/ issues/354 – mikebridge

Odpowiedz

0

A więc require.js powinien być zawsze używany na dowolnej stronie, aby pozwolić na modularność i czysty obszar nazw. Uważam, że każda "aplikacja" wymaga własnego skryptu main.js. Podczas optymalizacji witryny r.js można wyłączyć moduły z kompilacji, które należy zawsze wykonywać w jQuery.

W ten sposób require.js zawsze będzie ładował plik jquery.js w locie i przez większość czasu z pamięci podręcznej. Znalezienie innych modułów, które mogą być przechowywane w pamięci podręcznej między aplikacją a stroną główną, będzie musiało zostać wykonane według własnego uznania i zależy od przepływu użytkowników i innych czynników.

Wygląda na to, że masz dwa projekty, aplikację i witrynę marketingową. Wierzę, że te powinny być oddzielone do pewnego stopnia i powinny mieć swoje własne foldery "js" zawierające własne main.js.

+22

Ta odpowiedź zasadniczo mówi: "nie rób tego, co próbujesz zrobić". Czasem jest to dobra odpowiedź, ale w tym przypadku chciałbym się dowiedzieć, czy to, co robi, jest technicznie możliwe. Czy naprawdę wiemy wystarczająco dużo na temat tego pytania, aby wiedzieć, czy jego aplikacja jest tak duża, że ​​trzeba ją rozdzielić? Jeśli próbuje zbudować aplikację z jedną stroną, może potrzebować wielu plików wymaganych dla różnych segmentów swojej aplikacji ... –

+2

Nie sądzę, że jest to filozoficznie czy technicznie poprawne. Istnieje wiele przypadków, w których pojedyncza aplikacja może zawierać wiele kopii kodu, które nie powinny być jednocześnie przesyłane. Poniższa odpowiedź z @PutzKipa jest pomocna. –

38

Zespół requirejs ma kilka próbek dla aplikacji wielostronicowych na github. Zapraszamy do obejrzenia: https://github.com/requirejs/example-multipage

Zasadniczo masz zamiar mieć następującą strukturę:

  • page1.html: strona 1 z aplikacji.

  • page2.html: strona 2 aplikacji.

  • js app: katalog do przechowywania modułów specyficznych dla aplikacji.

  • lib: katalog do przechowywania modułów stron trzecich, takich jak jQuery.

  • common.js: zawiera konfigurację requirejs, która będzie celem kompilacji dla zestawu wspólnych modułów.

  • page1.js: używane dla danych-główne dla strony1.html. Ładuje wspólny moduł, a następnie ładuje app/main1, główny moduł dla strony 1.

  • page2.js: używany do danych-main dla page2.html. Ładuje wspólny moduł, a następnie ładuje app/main2, głównego modułu na stronie 2.

+0

Próbowałem tej przykładowej strony i udało mi się uzyskać działającą, zoptymalizowaną stronę. Spróbuj. – OnesimusUnbound

+0

Interesującym dla mnie fragmentem było to, że plik build.js mógłby wykluczyć plik, który został właśnie zbudowany, a każdy moduł w tym pliku byłby wykluczony. https://github.com/requirejs/example-multipage/blob/master/tools/build.js –

Powiązane problemy