【问题标题】:RequireJs define default depsRequireJs 定义默认的 deps
【发布时间】:2012-07-07 06:01:43
【问题描述】:

通常一个 requirejs 模块看起来像:

define('ModuleName', ['jquery', 'underscore', 'backbone'], function($, _, Backbone){

});

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

比如:

define('ModuleName', ['jquery'], function($){
    $("div.someClass").addClass('hide'); // works
    var Model = Backbone.Model.extend(); // works too
});

这可能吗?

如果是的话,我要如何或要查找的关键字是什么?

【问题讨论】:

    标签: javascript requirejs js-amd


    【解决方案1】:

    您感兴趣的模块必须附加到外部范围。默认情况下,Backbone、Underscore、jQuery 等保持附加到全局范围,除非您在它们上调用 noConflict()(并非所有模块都提供此功能)。将您的模块附加到全局范围不是一个很好的解决方案,但可以完成您的要求,并且无论如何都是默认行为。更好的选择是定义一个外部模块(或只是一个 require() 调用),其中包含除了您命名的子模块之外的那些依赖项。否则,使用 RequireJS 的大部分理由都丢失了。

    编辑例如:

    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

    您可以自己显式命名模块,但它使模块 便携性较差——如果您将文件移动到另一个目录,您将 需要改名字。

    【讨论】:

    • 嗨,你能给我一个更好的选择的例子吗?还是加载的模块只返回所有deps的对象/数组?
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2012-07-08
    • 1970-01-01
    • 2016-11-03
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多