【问题标题】:Dynamically load require.js modules under mixed base urls在混合基础 url 下动态加载 require.js 模块
【发布时间】:2012-08-28 06:16:11
【问题描述】:

我们有一个使用 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
    });
});

这部分走绝对路径路线还有其他解决方案吗?

【问题讨论】:

    标签: javascript requirejs js-amd


    【解决方案1】:

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 请注意此处的 dynamic 位。我不能使用路径,因为这发生在我的配置设置之后。如果路径以某种方式被插值,我可以使用/extension/{extension}/js/modules/
      • “理想情况下,我们能够为 require.js 传递/设置一个上下文,该上下文将以下模块加载范围限定在 baseUrl 内...” 这正是路径选项的作用。如果您需要动态的服务器端解决方案,我可以建议您发布关于服务器端正在发生的事情的描述吗?
      • 设置预定义路径。我们从稍后通过 ajax 请求加载的标记中的数据属性中选择这条路径。这是在我们用我们的路径吐出 require.js 配置之后的方式。我正在用更多的伪代码更新问题...
      • superp,我不知道你也可以设置部分路径,这对我有很大帮助!
      猜你喜欢
      • 2012-04-10
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多