Les chemins d'accès relatifs avec RequireJS modules/packages
Je suis assez nouveau dans RequireJS et j'ai couru dans un peu d'un problème. J'ai écrit un petit cadre sur l'Ossature à l'aide de RequireJS et je veux qu'il soit réutilisable dans différents projets. Ainsi, avec quelques recherches j'ai appris que nécessitent permet de paquets. C'était ce que je cherchais. J'ai un main.js fichier pour lancer mon application que pour l'essentiel, ressemble à ceci:
require.config({
packages: ['framework']
});
require(['framework'], function(framework) {
framework.createDash();
});
Puis dans le même répertoire que mon main.js j'ai un autre répertoire appelé "cadre" qui contient un autre main.js qui ressemble à ceci:
define(function(require, exports, module) {
exports.createDash = function(dash, element) {
require(['dash/dash.model', 'dash/dash.view'], function(DashModel, DashView) {
return new DashView({
model: new DashModel(dash),
el: element ? element : window
});
});
};
});
Dans la recherche, j'ai trouvé cette page qui indique que le "besoin" argument doit être portée à la sous-module. Cependant, lorsque j'essaie d'exiger des choses qu'ils sont toujours par rapport à mon origine main.js. J'ai essayé un certain nombre de choses et cherché pendant des heures en vain. Est-il possible que je peux avoir mon besoin/définir les appels à l'intérieur de mon colis inclus par rapport à la main.js dans il est à la racine?
Vous devez vous connecter pour publier un commentaire.
Vous devez définir vos sous-module du paquet dans le besoin de configuration:
Pour charger votre module, vous devez simplement utiliser votre "paquet" au exigences:
Dans votre paquet, vous devez utiliser le
./
préfixe pour charger vos fichiers relative à votre sous-module:Il est utile de raccourci: Si votre nom de paquet est égal à votre emplacement et le fichier principal est appelé " main.js alors vous pouvez remplacer ce
à ceci:
Aussi loin que je peux voir, vous avez déjà essayé de définir un paquet, mais avez-vous également utiliser l' ./préfixe? Sans ce préfixe besoin d'essayer de trouver les fichiers qu'il contient global de la racine du chemin d'accès. Et sans un paquet,
./
sera inutile, car le chemin d'accès relatif est le même que le mondial root-path.Cheers
J'ai trouvé la réponse à ma question, et la solution (ils n'étaient pas les mêmes, apparemment). Je crois que je vais le poster ici au cas où ça peut aider quelqu'un d'autre dans l'avenir.
Essentiellement ce que je voulais était de charger mon cadre dans son contexte propre. J'ai trouvé l'option contexte en vertu de la section de configuration sur le besoin d'un site web et un exemple de comment l'utiliser. À l'origine, j'ai essayé en faisant quelque chose comme:
Il y a deux problèmes avec cette. Tout d'abord, mon 'req' variable a été définie en dehors du cadre, mais je voulais le cadre à définir ses propres chemins. Et deuxièmement, chaque fois qu'un fichier en dehors du cadre aurait besoin d'un fichier à l'intérieur du cadre, ce qui à son tour nécessite 'jQuery', par exemple, jQuery (ou autre chose) ne serait pas nécessaire dans le contexte du cadre de l'instance de besoin et donc il ne trouve pas le fichier.
Ce que j'ai fait a été de définir mon cadre de l'main.js à ressembler à quelque chose comme ceci:
Et puis dans mon projet main.js fichier je viens de le faire:
Cela prend tout ce qui est passé dans le cadre de la méthode initialize() pour "baseURL" et ajoute que tous les chemins le cadre définit qui ne commence pas par un slash ( /) ou " n'importe quoi://", sauf s'ils sont de remplacer les chemins d'accès. Cela permet à l'emballage, en utilisant le cadre de remplacer des choses comme 'jQuery'.
Cela a fonctionné pour moi, l'ajout d'un
"./"
préfixe pour les noms de module:Un processus qui a bien fonctionné pour moi pour permettre à un paquet avec des submodules à être utilisé directement à partir de données principal ou à partir d'un hors cadre, en supposant qu'une main.js (ou autre emballage principal) est appelée par un nom particulier, était d'utiliser
var baseUrl = require.toUrl('packageName') + '/../'
comme préfixe à unrequire.config({ paths: { ... } })
fichier de configuration. Par exemple:Le réglage de
context: "xxx"
a bien fonctionné pour un appel normal modules avec./modName
, mais n'a pas de travail pour l'paths
argument pour moi.