2012-07-11 17 views
5

Tworzymy ramy, które zamierzamy wykorzystać w wielu projektach. Wszystkie projekty będą używać require.js do zarządzania modułami i zależnościami.Jak można utworzyć bibliotekę wielokrotnego użytku w postaci modułów AMD?

Idealnie chciałbym użyć optymalizatora r.js do skompilować framework do pojedynczego pliku, który może być dostarczony do aplikacji, które go używają. Że plik będzie zawierał wszystkie moduły ram tak, że w mojej aplikacji można napisać kod takich jak:

define(["framework/util/a", "framework/views/b"], function(A, B) { 
    var a = new A(); 
    // etc... 
}); 

Ale wydaje się, istnieją dwa problemy z tym podejściem.

  1. zależności framework/util/a nie powiedzieć require.js że musi załadować framework.js w którym znajdzie util/a
  2. Narzędzie optymalizacji generuje nazwy dla wszystkich modułów zawartych w framework.js takich jak define("util/a", function() { ... }); nawet jeśli require.js załadowany framework.js nie ma nic, że mówi się, że zdefiniowany moduł util/a jest modułem względem framework i jako taki jest identyfikowany jako framework/util/a

jestem brakuje SOMET hing lub jest lepszym podejściem do struktury moje ramy jako CommonJS pakiet i użyć opcji konfiguracyjnej require.js packages?

+0

Nie sądzę, istnieje uzasadniony sposób, aby to zrobić. Od @jrburke: "po prostu" rozpowszechniaj moduły w katalogu w formie źródłowej ", bez kompilacji." – rharper

Odpowiedz

2

Re: 1. Wygląda na to, że w rzeczywistości optymalizacja r.js nie została zaprojektowana w celu optymalizacji drzew podległych częściowo, ponieważ leniwy ładowanie zawiasów na ścieżkach plików. Na przykład. pytanie: path/to/module, aby faktycznie załadować path/to, wydaje się być hackerem. Jednym z rozwiązań byłoby rezygnacja z leniwego ładowania i nadpisanie kodu framework-built.js powyżej kodu aplikacji.

Odp .: 2. Potrzebujesz teraz swoich framework-built.js z pełnymi ścieżkami. Jednym ze sposobów byłoby zbudowanie dummy parent, który wymaga wszystkich framework, powiedzmy dummy-framework.js. W ten sposób Twój dummy-framework-built.js będzie miał pełną ścieżkę dla framework, a jeśli nie jest leniwy, powinien działać poprawnie.

Zastrzeżenie: Nie używałem require.js aż tak dużo, choć to mój najlepszy wysiłek :)

+0

Dzięki za wysiłek. Twoje podejście sprawia, że ​​jestem najbliżej tego, co udało mi się osiągnąć - zdecydowanie zasługuje na wyższy głos. Jednak szybka rozmowa z jrburke mówi mi, że prawdopodobnie nie chcę w ogóle kompilować biblioteki, a zamiast tego po prostu rozprowadzam cały folder źródłowy. – rharper

+0

Rozmawiałem też z Jamesem, nauczyłem się też trochę więcej, odkąd to opublikowałem. Zobacz http://stackoverflow.com/questions/12302440/requirejs-is-there-a-way-to-achieve-multiple-base-urls, gdzie odpowiedziałem na własne pytanie. W ten sposób uzyskuję aplikację "framework", wykorzystując niestandardowe 'paths' do leniwego ładowania na żywo, aw produkcji, lokalnie, buduję, wskazując te same ścieżki do lokalnego 'framework', który jest tylko folderem siostrzanym. – jpillora

Powiązane problemy