我正在研究使用require.js的项目,我遇到了一个简单的问题,即在每个模块中将库声明为依赖项。我在require.js中看到了许多示例,并且在每个模块中都声明了Backbone,jquery,underscore等库。如果您的应用程序只包含几个模块,那就没问题了。但是如果你的应用程序有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);
});
});
然后我们可以使用Backbone,' _'和' $'进入应用程序而不将它们声明为依赖项。
所以我试图理解为什么每次都应该定义它们。它只是严格遵守模块模式或其他东西吗?
感谢。
答案 0 :(得分:3)
将您的库作为参数传入需要的工厂函数是一种依赖注入的形式。现在,根据您对库依赖性的完全如何,您甚至可以在应用程序中同时使用该库的多个不同版本。以这种方式使用显式库依赖性编写模块可以让您将来灵活地混合需要jQuery 1.8和jQuery 2.0的模块。可以将不同的jQuery版本传递给每个模块。
如果每次都没有明确定义所有依赖项,那么您将依赖于作为加载库的副作用而创建的全局变量(window。$或window._)。在这种情况下,所有模块都必须依赖于相同版本的库。