Uwielbiamy RequireJS i AMD w fazie rozwoju, gdzie możemy edytować moduł, przeładować w naszej przeglądarce i od razu zobaczyć wynik. Ale kiedy przychodzi czas, aby połączyć nasze moduły w jeden plik do wdrożenia produkcyjnego, najwyraźniej musi być obecny program ładujący AMD, niezależnie od tego, czy jest to sam RequireJS, czy też jego mniejszy partner "migdałowy", jak wyjaśniono tutaj:Dlaczego połączone moduły RequireJS AMD wymagają modułu ładującego?
http://requirejs.org/docs/faq-optimization.html#wrap
Moje zamieszanie jest następujące: dlaczego ładowarka jest w ogóle potrzebna? O ile nie wystąpią bardzo nietypowe okoliczności, które wymagają wykonania połączeń require()
wewnątrz modułów, wydaje się, że seria modułów AMD może zostać połączona bez obecności ładowarki. Najprostszym możliwym przykładem będzie para modułów takich jak poniższe.
ModA.js:
define([], function() {
return {a: 1};
});
ModB.js:
define(['ModA'], function(A) {
return {b : 2};
});
Biorąc pod uwagę te dwa moduły, wydaje się, że może po prostu produkować concatenator poniższy tekst, a nie obciążać serwera produkcyjnego lub przeglądarka z dodatkową przepustowością lub obliczeniami wymaganymi przez RequireJS lub Almond.
sobie wyobrazić concatenator która produkuje (i używam szewron cudzysłowy «» aby pokazać, gdzie fragmenty z dwóch modułów powyżej zostały wstawione):
To tak daleko, jak tylko mogę patrz, poprawnie odtworzyć semantykę AMD, z minimalnym obcym klejem JavaScript. Czy jest dostępny taki konkatenator? Jeśli nie, czy byłbym głupcem, myśląc, że powinienem napisać jeden - czy naprawdę istnieje bardzo niewiele baz kodu, które składają się z prostych i czystych modułów napisanych przy pomocy define()
i które nigdy nie potrzebują dalszych wywołań require()
wewnątrz tego uruchomienia późniejszych asynchronicznych pobrań kodu?
Jak rozwiązałeś ten problem? Zauważyłem, że przy użyciu migdałów, plik min jest większy o 3k niż połączony plik (9K vs 6K). – Naor