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

发布于 2024-12-22 19:15:46 字数 354 浏览 1 评论 0原文

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

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

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

在不重命名lib/underscore-1.2.3.js的情况下,如何使用require.js加载它?

I'm trying to load underscore.js with require.js like this:

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

But this doesn't work because underscore.js exports a module name: define('underscore', function() { ... }).

Without renaming lib/underscore-1.2.3.js, how can I load it with require.js?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一梦浮鱼 2024-12-29 19:15:46

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

其中

@dvdotsenko 所有 AMD 加载器都允许将模块 ID 映射到部分路径,通常该配置称为“路径”,因此可以执行您想要的操作:

 requirejs.config({
       路径:
           下划线:'js/libs/underscore-1.2.3.min'
       }
   });
   require(['下划线'], function () {});
   
  
  

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

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

Alright, after some more googling, I've found: https://github.com/documentcloud/underscore/pull/338#issuecomment-3245213

Where

@dvdotsenko all AMD loaders allow mapping a module ID to a partial path, usually the configuration is called 'paths', so to do what you want:

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

Since underscore is used by other higher-level modules, like backbone, a common dependency name needs to be used to communicate a common dependency on underscore, and it makes sense to call that dependency 'underscore'. The paths config gives a way to do the mapping to a specific URL you want to use for that dependency.

This doesn't answer my question (ie, I still don't know how I'd go about loading underscore if all I had was a URL), but at least it's a functional workaround.

醉生梦死 2024-12-29 19:15:46

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

JSFiddle 示例

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);
        })
    }
)

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

While this doesn't strike me as the most ideal solution, you can require your external files, and then require their registered module names in the inner block.

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);
        })
    }
)

It might not look pretty, but that might be a recommended pattern for loading up initial assets so that they can be required intuitively in dependent modules.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文