require.js:如何加载一个以不同名称定义名称的模块?

时间:2011-12-22 20:47:54

标签: javascript requirejs js-amd

我正在尝试使用underscore.js加载require.js,如下所示:

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

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

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

加载它?

2 个答案:

答案 0 :(得分:2)

好吧,经过一些谷歌搜索,我发现:https://github.com/documentcloud/underscore/pull/338#issuecomment-3245213

哪里

  

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

   
   requirejs.config({
       paths:
           underscore: 'js/libs/underscore-1.2.3.min'
       }
   });
   require(['underscore'], function () {});
   
     

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

这不是回答我的问题(即,我仍然不知道如果我所拥有的是一个URL,我将如何加载下划线),但至少它是一个功能性的解决方法

答案 1 :(得分: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);
        })
    }
)

它可能看起来不太漂亮,但这可能是一种推荐的模式,用于加载初始资产,以便在相关模块中直观地要求它们。