ho capito la risposta alla mia domanda, e la soluzione (non erano la stessa apparentemente). Immagino che lo posterò qui nel caso in cui possa aiutare qualcun altro in futuro.
Essenzialmente quello che volevo era caricare il mio framework nel suo contesto. Ho trovato l'opzione di contesto sotto lo configuration section sul sito Web di require e uno example of how to use it. Inizialmente ho provato questo facendo qualcosa come:
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() {});
Ci sono stati due problemi con questo. Primo, la mia variabile 'req' veniva definita al di fuori del framework, ma volevo che il framework definisse i propri percorsi. E secondo, ogni volta che un file al di fuori del framework richiederebbe un file all'interno del framework, che a sua volta richiederebbe 'jQuery', per esempio, quindi jQuery (o qualsiasi altra cosa) non sarebbe richiesto all'interno del contesto dell'istanza del framework di richiedere e quindi non è stato in grado di trovare il file.
Quello che ho finito per fare stava definendo main.js del mio quadro di simile a questa:
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;
});
E poi nel main.js del mio file di progetto ho solo fare questo:
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);
});
Questo prende tutto ciò che viene passato al metodo initialize() del framework per 'baseURL' e lo antepone a qualsiasi percorso definito dal framework che non inizia con una barra o 'nulla: //', a meno che non siano percorsi di override. Ciò consente al pacchetto di utilizzare il framework per sovrascrivere cose come 'jQuery'.
Permette comunque al pacchetto di rendere la propria chiamata separata a require.config() e definire il proprio elenco di alias del percorso, a patto che i file alias dei riferimenti inizino con "./"? Non voglio dover utilizzare il percorso relativo completo a tutti i file, ogni volta che li riferimento con un define(). Da allora ho ristrutturato l'intero progetto, ma sono ancora curioso. –
So che questa risposta è un po 'datata, ma ultimamente, puoi tranquillamente usare percorsi relativi per richiedere moduli anche senza pacchetti. – hayavuk
Per riferimento: http://requirejs.org/docs/api.html#packages – Skarllot