我正在阅读Backbone Fundamentals,目前正在section上介绍如何使用RequireJS构建应用。
据我所知,匀场背后的想法是,通常在需要模块时,RequireJS也会计算出如何加载它们的依赖关系。但是当你试图加载一个非AMD模块时,这不起作用(我不知道为什么,但这是一个单独的问题)。为了解决这个问题,你可以设置一个垫片来说“在Y之前加载X”。
require.config({
shim: {
'Y': ['X']
}
});
我看到你可以用exports
来说,“把这个非AMD的东西放到一个全局变量而不是模块中。”
require.config({
shim: {
'Y': {
exports: 'globalY'
}
}
});
嗯,那解决了什么问题?非AMD库的问题不仅仅是RequireJS无法找出依赖关系吗?
答案 0 :(得分:12)
&#34>我不知道为什么"部分实际上需要解决问题。非AMD模块只需要 ,并且通过RequireJS加载非AMD模块并不能正常 也就是说,它需要将模块包装在define
调用中,该调用包含依赖项列表和工厂方法(more details here)。 "标准"旧式库将他们的东西写入全局范围,写入任意命名的命名空间(在Backbone' s window.Backbone
中)。从历史上看,开发人员会编写一个小的包装器模块来转换旧的"进入AMD的库,例如:
<强>骨架wrapper.js 强>
define([], function() {
return window.Backbone;
});
添加填充程序配置(added in RequireJS 2.0)允许在配置中以声明方式处理。
Shimming 不说&#34;将此非AMD内容放入全局变量而不是模块&#34; 。 Shimming说&#34;加载这个非AMD库并公开exports
变量中指定的全局命名空间,就好像它是一个AMD模块&#34;。
RequireJS's documentation以及其他一些SO问题实际上很好地解释了它:1,2。