Wie kann man mit RequireJS faul laden?

Wir erstellen eine nicht-trivalente Webanwendung mit Backbone, RequireJS und Handlebars, und nun, ich bin nur neugierig. Im Moment sieht jedes unserer Modelle so aus:

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

Wobei Ding / a, Ding / b ihre eigenen Abhängigkeiten haben, zum Beispiel von Lenkervorlagen usw. Was jetzt passiert, ist, dass in meiner main.js alle Router der obersten Ebene geladen und initialisiert werden. Jeder Top-Level-Router verfügt über eine Reihe von Abhängigkeiten (Modelle, Ansichten usw.), die jeweils ihre eigenen Abhängigkeiten aufweisen (Vorlagen, Hilfsprogramme, Hilfsprogramme usw.). Grundsätzlich eine große Baumstruktur.

Das Problem in diesem Fall ist, dass der gesamte Baum aufgelöst und beim Laden der Seite geladen wird. Das macht mir nichts aus, da wir es irgendwann durch den Optimierer laufen lassen und am Ende eine einzige große Datei haben (was RequireJS auf ein modulares Framework reduziert). Ich bin jedoch gespannt, ob Sie Inhalte wie Ansichten und Vorlagen "on demand" laden können.

Dort wird das "vereinfachte CommonJS-Wrapping" erklärtHierAlso habe ich das versucht:

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

Betrachtet man jedoch den Chrome-Netzwerkinspektor, so scheint RequireJS - auch ohne die Route auszulösen, die den doStuff-Handler auslöst - immer noch den zu ladenmyView Abhängigkeit. Fragen:

Ist das überhaupt möglich? Gibt es in RequireJS schwarze Magie, die nach Anrufen sucht?require() ohne das tatsächlich auszulösendoStuff Route?Ist dies die theoretisch korrekte Vorgehensweise zum verzögerten Laden von RequireJS-Modulen und -Ressourcen nach Bedarf?Funktioniert der r.js-Optimierer weiterhin wie angekündigt, wenn Sie diese Notation verwenden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage