RequireJS: Est-il un moyen de réaliser de multiples de la base des Url?
Je veux utiliser un domaine distinct comme un framework JavaScript et il va créer une base exiger config qui je peux augmenter à partir de l'app.
foo.example.com
main.js
lib/foo-specific.js
framework.example.com
framework.js <-- entry point
lib/jquery.js
lib/etc...
Idéalement, je voudrais être en mesure d'exiger 'lib/foo-spécifique" et/ou "lib/jquery" et les chemins viens de résoudre bien, mais de ce que j'ai trouvé, il n'y a aucun moyen de le faire, sauf si j'utilise un chemin d'accès spécifique de clé/valeur pour chaque fichier js dans le cadre. Pour le moment, j'ai un plugin personnalisé pour charger le chemin d'accès donné avec une autre url de base (par exemple,fw!lib/jquery
), mais si je voulais utiliser le text!
plugin, cela ne fonctionnera pas comme plugin de chaînage est pas pris en charge.
Voir https://github.com/jpillora/js-framework pour ce que j'ai actuellement reçu, et aussi https://github.com/jpillora/prettyprinter pour un cas d'utilisation.
Est-il un moyen propre à résoudre ce problème ? ou pour obtenir des multiples de la base des Url ?
Note: j'ai aussi regardé dans de multiples nécessitent des cas, bien que je ne pense pas que cela fonctionnerait comme je voudrais l'application pour être en mesure d'accéder le cadre de la config.
Vous devez vous connecter pour publier un commentaire.
Répondu par James Burke sur RequireJS Github Numéro de la page: Question n ° 447: Plusieurs la Base des Url · jrburke/requirejs.
S'avère être assez simple, si de données principal est le seul point d'entrée de vos scripts(les commentaires pour plus d'info), j'ai résolu mon problème en particulier avec les éléments suivants:
Mon application
index.html
:a la requirejs point d'entrée fixé à
framework.js
:Ainsi, au lieu de normalement faire
index.html->main.js
, nous allons ajouter une étape supplémentaireindex.html->framework.js->main.js
, ce qui donne le code d'application des connaissances des chemins dans le cadre du code.Par exemple, dans l'application http://prettyprint.jpillora.com/, une fois que besoin est chargé
framework.js
, il va de l'installation des chemins delib/...
pour http://framework.jpillora.com/ et définir labaseUrl
comme./js/
donc, une fois quemain
est nécessaire, il aura l'url de base fixé à son propre nom de domaine etlib
pointant vers un autre domaine.Qui résultats dans
require(['lib/foo', 'view/bar']);
la résolution d':
http://framework.jpillora.com/js/lib/foo.js
ethttp://prettyprint.jpillora.com/js/view/bar.js
Comme affiché ici, l'application est uniquement un
main.js
tout le reste vient de laframework
:Donc finalement, chaque fois que je charge une application
main.js
via la avec les ci-dessusframework.js
, je puis avoir accès à tous mes couramment utilisé les bibliothèques et les classes utilitaires. Voir application source.Noter également, avec le
r.js
de l'optimiseur et beau local de la structure du fichier, on peut également optimiser l'application dans un seul fichier js en tirant uniquement ce qui est nécessaire à partir deframework
.Le problème
J'ai eu un problème similaire, tout en essayant de mettre en place un environnement de test. J'ai eu un fichier de structure comme ceci:
Voici où ça devient compliqué: mon application scripts (
app.js
etdata.js
) assumer un RequireJS de configuration qui résoutdata
àsrc/js/data.js
,lib/underscore
àsrc/js/lib/underscore.js
etc, donc j'ai besoin d'une configuration dans mon environnement de test ainsi:Maintenant, je peux écrire mes tests:
Avec quelques personnalisé de rapprochement:
Cependant, que
'../../test/matchers'
partie est horriblement laid. Les spécifications de test ne devrait pas être dérangé par le fait de savoir les chemins de fichiers à d'autres modules que RequireJS de l'emploi. Au lieu de cela, nous voulons utiliser des noms symboliques.La solution
La RequireJS les chemins de config pouvez également mapper des répertoires.
Donc, la solution est un chemin simple config:
Maintenant, je peux vous référer à la
test
répertoire comme si c'était un enfant de labaseUrl
:Dans mon cas, effectivement en sort à peu près la même chose que si je pouvais avoir plusieurs
baseUrl
s.Jetez un oeil à la façon dont nous avons traité de routage et le contexte dans BoilerplateJS qui est une architecture de référence à grande échelle de développement de produits. Nous avons utilisé la bibliothèque crossroads.js pour acheminer les modules et les composants de l'INTERFACE utilisateur. Tout ce qu'il ya à faire est d'ajouter le chemin d'accès/de hachage pour l'ensemble des routes et il sera acheminé à travers le cadre.
Comme un exemple tous les chemins des composants de l'INTERFACE utilisateur sont ajoutés à l'URL de l'objet contrôleur.
Que pour accéder à la configuration du framework de l'information tout au long de l'application, la configuration/paramètres peuvent être attachés à la mondiale-objet de contexte de qui peut être consulté à l'intérieur de l'application.