我们有一个使用require.js的应用程序,它同时允许扩展,并且这些扩展的js从不同的路径提供。所以在我们的配置中我们有:
var require = {
baseUrl : '/app/js/modules/'
}
但扩展程序是从/extension/foo-extension/js/modules/
提供的。
此外,扩展是动态的,他们将一些html注入到使用data-module="foo/bar"
的页面中,我们选择加载该模块。
理想情况下,我们能够为require.js传递/设置一个上下文,该上下文将以下模块加载范围设置在baseUrl /extension/foo-extension/js/modules/
内。据我所知,我们需要require('/extension/foo-extension/js/modules/foo/bar')
从foo-extension加载foo/bar
。
这是一些伪代码,用于设想我们需要处理路径/上下文的设置:
define(['some-dep'], function(SomeDep) {
$.get('somepage', function(html) {
var extension = html.data('extension'); // "foo/bar"
var extensionBase = html.data('extensionBase'); // extension/foo-extension/js/modules/
// This is where we need to readjust require to use the base path for any foo module
});
});
这部分的另一个解决方案是走绝对路径吗?
答案 0 :(得分:4)
requirejs.config()可以在以后随时调用,并且加载器会将配置合并在一起。所以它应该等到你知道你想要用于'extension'的路径配置,然后通过另一个requirejs.config()调用设置它,然后用该路径加载扩展名。
答案 1 :(得分:2)
听起来你想要使用"paths" configuration option。例如:
var require = {
baseUrl : '/app/js/modules',
paths : {
'extension' : '/extension/foo-extension/js/modules'
}
};
然后,您只需致电require('extension/foo/bar')
即可加载/app/js/modules/extension/foo-extension/js/modules/foo/bar.js