我们有一个使用 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 扩展加载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
});
});
这部分有没有其他解决方案,从绝对路径路线?
requirejs.config(( 可以在以后随时调用,加载器会将配置合并在一起。因此,等到你知道要用于"extension"的路径配置是什么,然后通过另一个requirejs.config((调用进行设置,然后使用该路径加载扩展就足够了。
听起来您想使用"路径"配置选项。例:
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