繁体   English   中英

RequireJS shim导出的是什么?

[英]What is RequireJS shim exports for?

我正在阅读Backbone Fundamentals ,目前正在介绍如何使用RequireJS构建应用程序的部分

根据我的理解,匀场背后的想法是,通常当您需要模块时,RequireJS也会计算出如何加载它们的依赖关系。 但是当你试图加载一个非AMD模块时,这不起作用(我不知道为什么,但这是一个单独的问题)。 为了解决这个问题,你可以设置一个垫片来说“在Y之前加载X”。

require.config({
  shim: {
    'Y': ['X']
  }
});

我看到你可以使用exports来说“把这个非AMD的东西放到一个全局变量而不是一个模块”。

require.config({
  shim: {
    'Y': {
      exports: 'globalY'
    }
  }
});

嗯,那解决了什么问题? 非AMD库的问题不仅仅是RequireJS无法找出依赖关系吗?

实际上需要解决“我不知道为什么”的部分来回答这个问题。 匀场用于非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问题: 12

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM