2012-07-11 7 views
5

Wir erstellen ein Framework, das wir für mehrere Projekte verwenden möchten. Alle Projekte verwenden require.js, um Module und Abhängigkeiten zu verwalten.Wie kann man eine wiederverwendbare Bibliothek erstellen, die als AMD-Modul (e) strukturiert ist?

Im Idealfall würde Ich mag den r.js Optimierer kompiliert den Rahmen in eine einzige Datei verwenden, die zu den Anwendungen zur Verfügung gestellt werden können, die sie verwenden. Diese Datei wird alle Module des Frameworks enthält, so daß in meiner Anwendung kann ich schreiben Code wie:

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

Aber es scheint, gibt es zwei Probleme mit diesem Ansatz.

  1. auf framework/util/a Je nicht require.js sagen, die es braucht laden framework.js in dem es util/a
  2. Das optimize Tool generiert Namen für alle Module finden, die in framework.js wie define("util/a", function() { ... }); Selbst wenn require.js geladen framework.js gibt es nichts, dass es, dass der definierte Modul sagt util/a eine relative Modul framework ist und als solche identifiziert wird als framework/util/a

I somet fehlt bin Hing oder ist ein besserer Ansatz, um mein Framework als CommonJS-Paket zu strukturieren und require.js packages Konfigurationsoption verwenden?

+0

Ich glaube nicht, dass es eine vernünftige Möglichkeit, dies zu tun, verwendet. Von @jrburke: "Verteile nur Module in einem Verzeichnis in Quellform", kein Build. " – rharper

Antwort

2

Re: 1. Es scheint, dass in der Tat r.js Optimierung nicht entwickelt wurde, um partielle Abhängigkeitsbäume zu optimieren, da das träge Laden von Dateipfaden abhängt. Z.B. fragt path/to/module, um tatsächlich zu laden path/to würde wie ein Hack scheinen. Eine Lösung wäre, auf das Lazy Loading zu verzichten und den Wert framework-built.js über Ihrem Anwendungscode anzugeben.

Re: 2. Sie brauchen jetzt Ihre framework-built.js mit vollen Pfaden. Ein Weg wäre, einen Dummy-Elternteil zu erstellen, der alle framework, beispielsweise dummy-framework.js, benötigt. Auf diese Weise wird Ihr dummy-framework-built.js den vollständigen Pfad für framework definiert haben und wenn nicht faul geladen, sollte es gut funktionieren.

Haftungsausschluss: Ich habe nicht require.js allzu viel, aber das ist meine beste Mühe :)

+0

Danke für die Mühe. Deine Herangehensweise bringt mich so nahe an das heran, wie ich wollte - definitiv verdient die Abstimmung. Ein kurzes Gespräch mit jrburke sagt mir jedoch, dass ich die Bibliothek wahrscheinlich gar nicht kompilieren und stattdessen den gesamten Quellordner verteilen möchte. – rharper

+0

Ich habe auch mit James geplaudert, habe auch ein bisschen mehr gelernt seit ich das gepostet habe. Siehe http://stackoverflow.com/questions/12302440/requirejs-is-there-a-way-to-achieve-multiple-base-urls wo ich meine eigene Frage beantwortet habe. So erreiche ich eine "Framework" -Anwendung durch Verwendung benutzerdefinierter 'Pfade' für Live-Lazy-Laden, und in der Produktion, lokal, baue ich, indem ich dieselben Pfade auf das lokale 'Framework' zeige, das nur ein Geschwister-Ordner ist. – jpillora