Я разобрался с ответом на мой вопрос и решением (по-видимому, они не были одинаковыми).Я предполагаю, что я опубликую это здесь в случае, если это может помочь кому-то еще в будущем.
По существу, я хотел загрузить мою структуру в ее собственном контексте.Я нашел контекстную опцию в разделе конфигурации на веб-сайте require и пример того, как его использовать .Первоначально я попытался сделать это, сделав что-то вроде:
var req = require.config({
baseUrl: 'framework',
context: 'framework',
paths: {
jQuery: 'lib/jquery/jquery-1.7.min.js',
Underscore: 'lib/underscore/underscore.min.js',
Backbone: 'lib/backbone/backbone.min.js',
etc...
}
});
req(['main'], function() {});
Было две проблемы с этим.Во-первых, моя переменная 'req' определялась вне фреймворка, но я хотел, чтобы фреймворк определял ее собственные пути.И, во-вторых, всякий раз, когда файлу за пределами фреймворка потребуется файл внутри фреймворка, что, в свою очередь, потребует, например, 'jQuery', тогда jQuery (или что-то еще) не потребуется в контексте экземпляра фреймворкаof require и поэтому он не может найти файл.
В итоге я определил main.js своего фреймворка, чтобы он выглядел примерно так:
var paths = {
jQuery: 'lib/jquery/jquery-1.7.min.js',
Underscore: 'lib/underscore/underscore.min.js',
Backbone: 'lib/backbone/backbone.min.js',
etc...
};
define(function() {
var exports = {};
exports.initialize = function(baseUrl, overridePaths, callback) {
if(!overridePaths) {
overridePaths = {};
}
if(baseUrl && baseUrl[baseUrl.length - 1] != '/') {
baseUrl = baseUrl + '/';
}
var fullpaths = {};
for(var path in paths) {
// Don't add baseUrl to anything that looks like a full URL like 'http://...' or anything that begins with a forward slash
if(paths[path].match(/^(?:.*:\/\/|\/)/)) {
fullpaths[path] = paths[path];
}
else {
fullpaths[path] = baseUrl + paths[path];
}
}
var config = {paths: fullpaths};
for(var pathName in overridePaths) {
config.paths[pathName] = overridePaths[pathName];
}
require.config(config);
// Do anything else you need to do such as defining more functions for exports
if(callback) {
callback();
}
}
return exports;
});
А потом в моем проектеФайл main.js Я просто делаю это:
require(['framework/main'], function(framework) {
// NOTE: This setTimeout() call is used because, for whatever reason, if you make
// a 'require' call in here or in the framework without it, it will just hang
// and never actually go fetch the files in the browser. There's probably a
// better way to handle this, but I don't know what it is.
setTimeout(function() {
framework.initialize('framework', null, function() {
// Do stuff here
}
}, 0);
});
Это берет все, что передано в метод initialize () фреймворка для baseURL, и добавляет это к любым путям, которые определяет фреймворк и которые не начинаются скосая черта или что-нибудь: //, если они не являются путями переопределения.Это позволяет пакету, использующему фреймворк, переопределять такие вещи, как «jQuery».