【问题标题】:require.js: how can I load a module that defines a name under a different name?require.js:如何加载以不同名称定义名称的模块?
【发布时间】:2011-12-22 20:47:54
【问题描述】:

我正在尝试像这样用require.js 加载underscore.js

require(["libs/underscore-1.2.3.js"], function(_) {
    ...
});

但这不起作用,因为underscore.js 导出了一个模块名称:define('underscore', function() { ... })

如果不重命名lib/underscore-1.2.3.js,如何加载require.js

【问题讨论】:

    标签: javascript requirejs js-amd


    【解决方案1】:

    好的,经过一番谷歌搜索,我找到了:https://github.com/documentcloud/underscore/pull/338#issuecomment-3245213

    在哪里

    @dvdotsenko 所有 AMD 加载器都允许将模块 ID 映射到部分路径,通常配置称为“路径”,所以做你想做的事:

    需要js.config({ 路径: 下划线:'js/libs/underscore-1.2.3.min' } }); 要求(['下划线'],函数(){});

    由于下划线被其他更高级别的模块(如主干)使用,因此需要使用通用依赖项名称来传达对下划线的通用依赖项,并将该依赖项称为“下划线”是有意义的。路径配置提供了一种映射到要用于该依赖项的特定 URL 的方法。

    这并没有回答我的问题(即,如果我只有一个 URL,我仍然不知道如何加载下划线),但至少它是一种实用的解决方法.

    【讨论】:

      【解决方案2】:

      虽然我觉得这不是最理想的解决方案,但您可以要求您的外部文件,然后在内部块中要求他们注册的模块名称。

      JSFiddle Example

      require(
          ['require','http://documentcloud.github.com/underscore/underscore-min.js'],
          function(require){
              require(['underscore'],function(_){
                  var a = _.intersection([1,2,3],[2,3,4]);
                  document.write("Underscore is available in the closure : " + a);
              })
          }
      )
      

      它可能看起来不漂亮,但这可能是加载初始资产的推荐模式,以便在依赖模块中直观地需要它们。

      【讨论】:

        猜你喜欢
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        • 2018-07-07
        • 2015-08-09
        相关资源
        最近更新 更多