Requirejs 在每个模块中将库重新声明为依赖项

Requirejs 在每个模块中将库重新声明为依赖项,requirejs,amd,Requirejs,Amd,我正在做一个使用require.js的项目,我遇到了一个简单的问题,关于在每个模块中将库声明为依赖项。我看到了许多require.js的例子,每个模块都声明了主干、jquery、下划线等库。如果您的应用程序只包含两个模块就可以了。但是,如果您的应用程序有40-50个模块,那么每次定义jquery就有点乏味了 另一方面,我们可以通过以下方式将所有库加载到require()中: // Just an example require.config({ paths: { jque

我正在做一个使用require.js的项目,我遇到了一个简单的问题,关于在每个模块中将库声明为依赖项。我看到了许多require.js的例子,每个模块都声明了主干、jquery、下划线等库。如果您的应用程序只包含两个模块就可以了。但是,如果您的应用程序有40-50个模块,那么每次定义jquery就有点乏味了

另一方面,我们可以通过以下方式将所有库加载到require()中:

// Just an example
require.config({
    paths: {
        jquery: '../bower_components/jquery/jquery',
        underscore: '../bower_components/underscore/underscore',
        backbone: '../bower_components/backbone/backbone'
    }
});

require(['jquery', 'underscore', 'backbone'], function () {
    require([
        'app',
        'bootstrap'
    ], function (App) {
        var app = new App();
        document.body.appendChild(app.el);
    });
});
然后我们可以在应用程序中使用主干“.”和“$”,而无需将它们声明为依赖项

所以我试图理解为什么我们每次都要定义它们。这仅仅是对模块模式的严格遵守还是其他什么


谢谢。

将库作为参数传递给require factory函数是一种依赖注入形式。现在,根据库依赖关系的友好程度,您甚至可以在一个应用程序中同时使用多个不同版本的库。以这种方式编写具有显式库依赖关系的模块,可以允许您将来灵活地混合需要jquery1.8和jquery2.0的模块。可以向每个模块传递不同的jQuery版本


如果不是每次都显式定义所有依赖项,那么您就依赖于作为加载库的副作用而创建的全局变量(window.$或window.\)。在这种情况下,所有模块都必须依赖于相同版本的库。

我想说,要求依赖关系(痛苦地)明确是AMD模块的主要优点之一。查看依赖项是一个很好的LITMUS测试:如果每个模块太多,或者它们处于不同的抽象级别(例如主干和jQuery总是出现在一起),那么这可能是一个信号,您应该考虑拆分和/或使这些层更具特色。