首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequireJ定义默认dep

RequireJ定义默认dep
EN

Stack Overflow用户
提问于 2012-07-07 14:01:44
回答 1查看 961关注 0票数 4

通常要求模块如下所示:

代码语言:javascript
复制
define('ModuleName', ['jquery', 'underscore', 'backbone'], function($, _, Backbone){

});

因为我的设置中的每个文件都需要下划线和主干,所以我希望它们在模块中自动可用,而不必将它们定义为依赖项。

所以就像这样:

代码语言:javascript
复制
define('ModuleName', ['jquery'], function($){
    $("div.someClass").addClass('hide'); // works
    var Model = Backbone.Model.extend(); // works too
});

这个是可能的吗?

如果是,我必须查找的关键字是怎样的或什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-07 14:10:40

您感兴趣的模块必须附加到外部作用域。默认情况下,Backbone、Underscore、jQuery等保持附加到全局作用域,除非您对它们调用noConflict() (并不是所有模块都提供此功能)。将模块附加到全局作用域不是一个很好的解决方案,但可以实现您所要求的,而且这是默认行为。更好的替代方法是定义一个外部模块(或者只是一个require()调用),除了命名的子模块之外,它还包含这些依赖项。否则,使用RequireJS的大部分理由都会丢失。

编辑后的示例:

代码语言:javascript
复制
require(['underscore', 'backbone'],
    function (_, Backbone) {
        define('ModuleName', ['jquery'], function($){
            $("div.someClass").addClass('hide'); // works
            var Model = Backbone.Model.extend(); // works too
         });

        //Other modules here, otherwise this is pointless too
    }
);

即使是这样,也只有在同一文件中定义多个命名模块时才有用。不幸的是,从我的角度来看,最好的解决方案是显式导入模块并允许隐式模块命名,但上面的示例最接近您的要求。至于隐式模块名称,来自the RequireJS api docs

:您可以自己显式命名模块,但这会降低模块的可移植性--如果将文件移动到另一个目录,则需要更改名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11372709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档