2015-06-03 13 views
5

Jak reklamowane The rjs w Play możnaJak korzystać z Optymalizatora RequireJS w strukturze Play?

zapewniają, że wszelkie zasoby JavaScript przywoływane z poziomu WebJar są automatycznie odwoływać od jsdelivr CDN. Ponadto, jeśli zostanie znaleziony dowolny plik .min.js, to zostanie on użyty zamiast .js. Dodatkowy bonus polega na tym, że nie trzeba wprowadzać żadnych zmian w swoim html!

Jednak nie wydaje mi się, aby to zadziałało.

  1. Próbowałem uruchomić moją aplikację Play w trybie produkcyjnym, a wszystkie moje javascripts webjar nadal są określane jako lokalne.
  2. Nie widzę wersji javascript .min używanej w produkcji.
  3. Nie mogę uzyskać wtyczki uzależniającej do pracy w trybie produkcyjnym. Na przykład, kiedy chcemy wprowadzić jquery w moim kodu jak ten

    define ([ 'jquery'], function ($) { 'use strict';. console.log ($ grep); return { Suma: funkcja (a, b) { return a + b; } }; });

mogę uzyskać to działa dobrze w trybie dev, ale w trybie produkcyjnym, rjs failed mówiąc

[info] Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info] Error: Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info]  at Error (native) 

oczywiście jest ona patrząc w niewłaściwym miejscu dla jQuery, pomimo konfiguracji config generowanego przez Webjar

requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]}) } 

mieć poprawną lokalizację dla jquery.

Używam programu Play 2.4.0 z konfiguracją pipelineStages := Seq(rjs, digest) w moim pliku build.sbt.

Proszę dać mi znać, gdzie źle się spisałem.

Dzięki!

+1

Mam ten sam problem, zastanawiam się, czy to jest problem z konfiguracją i dlatego otworzyłem problem tutaj https://github.com/webjars/sample-play2/issues/7 –

+0

Oto co zauważyłem do tej pory , bez jasnego wyjaśnienia, dlaczego rzeczy działają lub nie działają. Musisz korzystać z Klasycznych Webjarów. Po zadeklarowaniu ścieżek 'paths' w pliku main.js, umieść adresy URL w [nawiasach kwadratowych]. Zdecydowałem się zrezygnować z modułu Webjar, ponieważ nie chcę 2 wersji tego samego pliku. Daj mi znać jak idzie. Napiszę post z instrukcją, gdy tylko wymyślę, jak to połączyć. – Khanetor

+0

Porzuciłeś moduł webjar? Więc już ich nie używasz? To byłoby niefortunne. Nadal zastanawiam się, czy po prostu brakuje jakiejś konfiguracji, czy może istnieje niekompatybilność (sbt-rjs nie było od jakiegoś czasu aktualizowane). –

Odpowiedz

4

Okazuje się, że obsługa optymalizacji RequireJS nie dotyczy wszystkich Webjarów, ale raczej ogranicza się do Klasycznych Webjarów. enter image description here

Nawet wtedy plik budujący webjar musi być dołączony do zwykłego modułu, aby rjs mógł działać. enter image description here

Jeśli spojrzysz na klasyczny webjar jQuery, na przykład zobaczysz, że dołączono specjalną instrukcję budowania webjar. Zapoznaj się z tym plikiem, aby uzyskać informacje. enter image description here

Gdy już zidentyfikujesz webjar, który jest gotowy na RequireJS, możesz pozwolić sbt-rjs to zrobić.Oto moja konfiguracja referencyjna:

/** javascripts/main.js **/ 
'use strict'; 

requirejs.config({ 
    paths:{ 
     'jquery': ['../lib/jquery/jquery'], 
     'react': ['../lib/react/react'], 
     'bootstrap': ['../lib/bootstrap/js/bootstrap'], 
     'react-bootstrap': ['../lib/react-bootstrap/react-bootstrap'] 
    }, 
    shim: { 
     'bootstrap': { 
      deps: ['jquery'] 
     }, 
     'react-bootstrap': { 
      deps: ['react'] 
     } 
    } 
}); 

Pamiętaj, aby mieć nawiasy kwadratowe, inaczej wymiana CDN nie nastąpi.

W przypadku skryptów, które nie są wymagane, nie należy mieć nawiasów kwadratowych podczas deklarowania paths. W przeciwnym razie rjs nie będzie budował z błędem path fallback not supported. Oczywiście nie dostaniesz zasiłku CDN. Trzeba tylko zauważyć, że optymalizacja css RequireJS też działa. Ale ogranicza się tylko do wstawiania css, tak jak robi to zwykły Requirejs.

+0

Dzięki! Spodziewałem się, że wygeneruje 'requirejs.config', ale tak się nie dzieje. –

+0

Korekta, nie potrzebujesz kwadratowych nawiasów, aby zastąpić cdn. – Khanetor

+0

Kilka rzeczy do podkreślenia ... 'sbt-rjs' nie używa konfiguracji WebJar RequireJS. Musisz więc ręcznie tworzyć konfiguracje używając 'sbt-rjs'. Wbudowana konfiguracja WebJar RequireJS pochodzi z 'webjars-requirejs.js', ale teraz pochodzi z' pom.xml' i jest wyświetlana przez 'webjars-locator' dla ładowania modułu RequireJS po stronie klienta. NPM i Bower WebJars powinny działać tak jak klasyczne WebJars dla 'sbt-rjs', ponieważ są one wyodrębniane w ten sam sposób. –

Powiązane problemy