作者:唯依爱时尚服饰 | 来源:互联网 | 2023-05-17 02:28
我正在阅读Backbone Fundamentals,目前正在介绍如何使用RequireJS构建应用程序的部分.
根据我的理解,匀场背后的想法是,通常当您需要模块时,RequireJS也会计算出如何加载它们的依赖关系.但是当你试图加载一个非AMD模块时,这不起作用(我不知道为什么,但这是一个单独的问题).为了解决这个问题,你可以设置一个垫片来说"在Y之前加载X".
require.config({
shim: {
'Y': ['X']
}
});
我看到你可以exports
说,"把这个非AMD的东西放到一个全局变量而不是一个模块".
require.config({
shim: {
'Y': {
exports: 'globalY'
}
}
});
嗯,那解决了什么问题?非AMD库的问题不仅仅是RequireJS无法找出依赖关系吗?
1> kryger..:
实际上需要解决"我不知道为什么"的部分来回答这个问题.匀场只需要非AMD模块,并通过加载RequireJS非AMD模块不能正常工作正是因为RequireJS需要AMD模块.也就是说,它需要将模块包装在define
包含依赖项列表和工厂方法的调用中(此处有更多详细信息)."标准",旧式库将它们的东西写入全局范围,写入任意命名的命名空间(在Backbone的情况下:) window.Backbone
.从历史上看,开发人员会编写一个小的包装模块来将"旧"库转换为AMD,例如:
骨干-wrapper.js
define([], function() {
return window.Backbone;
});
添加填充程序配置(在RequireJS 2.0中添加)允许在配置中以声明方式处理此问题.
Shimming 并不是说"将这种非AMD的东西放入全局变量而不是模块".Shimming说"加载这个非AMD库并公开exports
变量中指定的全局命名空间,就好像它是一个AMD模块".
它实际上是很好的解释中RequireJS的文档和其他一些SO问题:1,2.