2013-07-29 30 views
5

Czy można importować poszczególne moduły ze zoptymalizowanego pakietu RequireJS/r.js?RequireJS - Importowanie modułów w zoptymalizowanym pakiecie r.js

mam JavaScript w projekcie podziale na dwie oddzielne składniki MyLibrary - '' i '' MyApplication

MyLibrary składa się z dwóch oddzielnych modułów, 'MyModule1' i 'MyModule2'.

W trybie programowania mogę importować każdy z tych modułów za pomocą polecenia RequireJS z normalną definicją (["MojaLibrary/MyModule1"], funkcja() {}) z MyApplication.

Jednak po uruchomieniu MyLibrary przez r.js, nie wydaje się to już możliwe - nie wydaje się, aby można było bezpośrednio odwoływać się do modułów wewnętrznych.

Widzę ze skompilowanego/zoptymalizowanego źródła, że ​​istnieją bloki define() dla każdego modułu, jednak RequireJS w Mojej aplikacji nie wydaje się mieć możliwości odniesienia się do nich bezpośrednio.

Czy to jest możliwe, czy też będę musiał połączyć całą moją aplikację w pojedynczy plik, aby to zadziałało.

Edytuj: Faza optymalizacji RequireJS jest wykonywana w mojej strukturze Play i mam minimalną kontrolę nad konfiguracją kompilacji.

({appDir: "javascripts", 
[info]   baseUrl: ".", 
[info]   dir:"javascripts-min", mainConfigFile: "javascripts/build.js", modules:   [{name: "main"}]}) 
+0

Czy możesz wysłać swoją konfigurację kompilacji r.js i dowolny inny odpowiedni kod? – explunit

+0

Pliki kompilacji są generowane w locie przez framework, z którego korzystam (Play 2.1), i nie ma ich zbyt wiele. I tak go dodam. –

Odpowiedz

2

Aby korzystać z modułów z biblioteki, musisz poinstruować RequireJS, jak znaleźć te moduły. W main.js trzeba mieć coś takiego:

require.config({ 
     // ... 
     paths: { 
      // ... 
      'MyLibraryBundleName': 'dist/MyLibraryFile', 
      // ... 
     }, 
     // ... 
     bundles: { 
      //... 
      'MyLibraryBundleName': ['MyLibrary/MyModule1', 'MyLibrary/MyModule2'], 
      //... 
     } 
    }); 

Kiedy MyApplication odwołuje się do modułu tak:

define(['MyLibrary/MyModule1'],function(){}) 

... jak wspomniałeś, RequireJS będzie szukał „MyLibrary/MyModule1 "i znajdzie go w sekcji" pakunki ", a następnie sprawdzi sekcję" ścieżka ", aby znaleźć rzeczywisty plik" dist/MyLibraryFile ", który zostanie załadowany.

Powiązane problemy