1

我们有一个使用 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/。据我所知,我们需要从 foo-extensionrequire('/extension/foo-extension/js/modules/foo/bar')加载。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
    });
});

走绝对路径路线是否有另一种解决方案?

4

2 回答 2

4

requirejs.config() 可以在以后随时调用,加载器会将配置合并在一起。因此,等到您知道要为“扩展”配置路径使用什么就足够了,然后通过另一个 requirejs.config() 调用进行设置,然后使用该路径加载扩展。

于 2012-08-28T17:27:51.380 回答
2

听起来您想使用“路径”配置选项。例子:

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

于 2012-08-28T06:29:28.440 回答