Jak osiągnąć leniwe ładowanie za pomocą RequireJS?

Budujemy aplikację internetową bez triali, używając Backbone, RequireJS i Handlebars, i cóż, jestem po prostu ciekawy. W tej chwili każdy z naszych modeli wygląda tak:

define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
  return Backbone.Router.extend({
    // stuff here
  });
});

gdzie rzecz / a, rzecz / b mają swoje własne zależności, na przykład na szablonach Handlebars itp. Teraz dzieje się tak, że w moim main.js wszystkie routery „najwyższego poziomu” są ładowane i inicjowane; każdy router najwyższego poziomu ma zestaw zależności (modeli, widoków itp.), z których każdy ma własne zależności (szablony, pomocniki, narzędzia itp.). Zasadniczo duża struktura drzewa.

Problem w tym przypadku polega na tym, że całe drzewo jest rozwiązywane i ładowane przy ładowaniu strony. Nie przeszkadza mi to, że w końcu przejdziemy przez optymalizator i skończymy z jednym dużym pojedynczym plikiem (redukując RequireJS do zasadniczo struktury modularyzacji). Jestem jednak ciekawy, czy można ładować takie rzeczy, jak widoki i szablony „na żądanie”.

Wyjaśniono „uproszczone opakowanie CommonJS”tutaj, więc spróbowałem tego:

define(function(require) {
  Backbone = require('Backbone');
  return Backbone.Router.extend({
    doStuff: function() {
      var MyView = require('js/myView');
      new MyView().render();
    }
  });
});

Jednak patrząc na inspektora sieci Chrome, wydaje się, że RequireJS - w jakiś sposób, nawet bez wyzwalania trasy, która uruchamia program obsługi doStuff - nadal ładujemyView zależność. Pytania:

Czy to możliwe? Czy w RequireJS znajdują się czarne magie szukające połączeńrequire() bez aktywowaniadoStuff trasa?Czy jest to teoretycznie poprawny sposób poruszania się po „na żądanie”, leniwym ładowaniu modułów i zasobów RequireJS?Czy optymalizator r.js nadal działa tak, jak jest reklamowany, jeśli używasz tej notacji?

questionAnswers(2)

yourAnswerToTheQuestion