मैं अपने सवाल का जवाब पता लगा, और समाधान (वे जाहिरा तौर पर ही नहीं थे)। मुझे लगता है कि अगर मैं भविष्य में किसी और की मदद कर सकता हूं तो मैं इसे यहां पोस्ट करूंगा।
अनिवार्य रूप से जो मैं चाहता था वह अपने ढांचे को अपने संदर्भ में लोड करना था। मुझे आवश्यकता की वेबसाइट पर configuration section के तहत संदर्भ विकल्प और example of how to use it पर संदर्भ विकल्प मिला। मूल रूप से मैंने ऐसा कुछ करने की कोशिश की:
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 (या जो कुछ भी) की आवश्यकता नहीं होगी आवश्यकता है और इसलिए यह फ़ाइल नहीं मिल सका।
मुझे अपने ढांचे के 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);
});
यह 'बेसURL' के लिए फ्रेमवर्क की आरंभिक() विधि में जो कुछ भी पारित हो जाता है और उस फ्रेम को परिभाषित करता है जो फ्रेमवर्क परिभाषित करता है जो आगे की स्लैश या 'कुछ भी: //' से शुरू नहीं होता है, जब तक वे पथ ओवरराइड नहीं करते हैं। यह 'jQuery' जैसी चीज़ों को ओवरराइड करने के लिए ढांचे का उपयोग करके पैकेज को अनुमति देता है।
require.config({
packages: [
{ name: 'packagename',
location: 'path/to/your/package/root', // default 'packagename'
main: 'scriptfileToLoad' // default 'main'
}]
... some other stuff ...
});
अपने मॉड्यूल तुम सिर्फ आवश्यकताओं पर अपने 'PackageName' का उपयोग करने की आवश्यकता है लोड करने के लिए:
क्या यह अभी भी पैकेज को requ.config() के लिए अपनी अलग कॉल करने की अनुमति देता है और इसे पथ उपनामों की अपनी सूची परिभाषित करता है, जब तक उपनाम संदर्भ फ़ाइलों को './' से शुरू किया जाए? मैं सभी फ़ाइलों के पूर्ण सापेक्ष पथ का उपयोग नहीं करना चाहता, हर बार जब मैं उन्हें परिभाषित() के साथ संदर्भित करता हूं। मैंने पूरी परियोजना को पुनर्गठित कर लिया है, लेकिन मैं अभी भी उत्सुक हूं। –
मुझे पता है कि यह उत्तर थोड़ा दिनांकित है, लेकिन हाल ही में, आप संकुल के बिना भी मॉड्यूल की आवश्यकता के लिए सापेक्ष पथ का सुरक्षित रूप से उपयोग कर सकते हैं। – hayavuk
संदर्भ के लिए: http://requirejs.org/docs/api.html#packages – Skarllot