Javascript 在混合基本URL下动态加载require.js模块

Javascript 在混合基本URL下动态加载require.js模块,javascript,requirejs,js-amd,Javascript,Requirejs,Js Amd,我们有一个使用require.js的应用程序,它同时允许扩展,这些扩展的js从不同的路径得到服务。因此,在我们的配置中,我们有: var require = { baseUrl : '/app/js/modules/' } 但是扩展是从/extension/foo extension/js/modules/提供的。 此外,扩展是动态的,它们将一些html注入到使用数据模块=foo/bar的页面中,我们使用该模块加载该页面 理想情况下,我们能够为require.js传递/设置一个上下文,该上

我们有一个使用require.js的应用程序,它同时允许扩展,这些扩展的js从不同的路径得到服务。因此,在我们的配置中,我们有:

var require = {
  baseUrl : '/app/js/modules/'
}
但是扩展是从/extension/foo extension/js/modules/提供的。 此外,扩展是动态的,它们将一些html注入到使用数据模块=foo/bar的页面中,我们使用该模块加载该页面


理想情况下,我们能够为require.js传递/设置一个上下文,该上下文将以下模块加载的范围限定在baseUrl/extension/foo extension/js/modules/中。据我所知,我们需要使用“/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
    });
});

对于这一部分,使用绝对路径路径还有其他解决方案吗?

听起来您希望使用。例如:

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

听起来您想使用。例如:

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

requirejs.config,稍后可以随时调用,加载程序会将配置合并在一起。因此,等待知道“扩展”的路径配置要使用什么就足够了,然后通过另一个requirejs.config调用对其进行设置,然后使用该路径加载扩展。

requirejs.config可以稍后随时调用,加载程序会将配置合并在一起。因此,等待知道“扩展”的路径配置要使用什么,然后通过另一个requirejs.config调用进行设置,然后使用该路径加载扩展。

注意这里的动态位。我无法使用路径,因为这是在设置配置后发生的。如果以某种方式插入路径,我可以使用/extension/{extension}/js/modules/尽管如此。。。这正是路径选项所做的。如果您需要一个动态的服务器端解决方案,我建议您发布一个关于服务器端正在发生的事情的描述,这是为了设置预定义的路径。我们从稍后通过ajax请求加载的标记中的数据属性中获取该路径。这是在我们用路径吐出require.js配置之后的方式。我正在用更多的伪代码更新这个问题…Super,我不知道你也可以设置部分路径,这帮了我很多忙!注意这里的动态部分。我无法使用路径,因为这是在设置配置后发生的。如果以某种方式插入路径,我可以使用/extension/{extension}/js/modules/尽管如此。。。这正是路径选项所做的。如果您需要一个动态的服务器端解决方案,我建议您发布一个关于服务器端正在发生的事情的描述,这是为了设置预定义的路径。我们从稍后通过ajax请求加载的标记中的数据属性中获取该路径。这是在我们用路径吐出require.js配置之后的方式。我正在用更多的伪代码更新这个问题…Super,我不知道你也可以设置部分路径,这帮了我很多忙!