下面的垫片中“导出”属性(property)的目的是什么?真的需要吗?
requirejs.config({
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
}
}
});
我问,因为它看起来很多余-当模块包含在依赖项列表中时,我们将再次指定导出的名称作为函数参数:
define(['backbone'], function (Backbone) {
return Backbone.Model.extend({});
});
最佳答案
如果在示例中未使用shim
,则作为参数传递的Backbone
对象将是未定义的,因为Backbone不兼容AMD,并且不会返回RequireJS使用的对象。
define(['backbone'], function (Backbone) {
// No shim? Then Backbone here is undefined as it may
// load out of order and you'll get an error when
// trying to use Model
return Backbone.Model.extend({});
});
为了提供一些背景信息,我将使用r.js优化器吐出的代码,但在本示例中将对其进行简化。通过阅读优化器产生的结果,它帮助我理解了这一点。
被填充垫片的 Backbone 将如下所示:
// Create self invoked function with the global 'this'
// passed in. Here it would be window
define("backbone", (function (global) {
// When user requires the 'backbone' module
// as a dependency, simply return them window.Backbone
// so that properites can be accessed
return function () {
return global.Backbone;
};
}(this)));
关键是要在请求模块时让RequireJS返回给您,它会确保先加载该模块,然后再进行加载。在优化器的情况下,它将只简单地预先嵌入库。
关于requirejs - RequireJS-shim中 “exports”属性的作用是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14095308/