【问题标题】:What is RequireJS shim exports for?RequireJS shim 导出的目的是什么?
【发布时间】:2015-05-25 02:57:52
【问题描述】:

我正在阅读Backbone Fundamentals,目前正在使用section,它描述了如何使用 RequireJS 构建应用程序。

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

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

我看到您可以使用exports 来表示,“将这个非 AMD 的东西放入全局变量而不是模块中”。

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

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

【问题讨论】:

    标签: javascript backbone.js requirejs


    【解决方案1】:

    实际上需要解决“我不知道为什么”部分才能回答问题。非 AMD 模块需要匀场,而通过 RequireJS 加载非 AMD 模块不起作用精确,因为 RequireJS 需要 AMD 模块。也就是说,它需要将模块包装在包含依赖列表和工厂方法 (more details here) 的 define 调用中。 “标准”,旧式库将它们的内容写入全局范围,写入任意命名的命名空间(在 Backbone 的情况下:window.Backbone)。从历史上看,开发人员会编写一个小型包装模块来将“旧”库转换为 AMD,例如:

    backbone-wrapper.js

    define([], function() {
      return window.Backbone;
    });
    

    添加 shim 配置 (added in RequireJS 2.0) 允许在配置中以声明方式处理此问题。

    Shimming 不是“将这个非 AMD 的东西放入全局变量而不是模块”。 Shimming 是说“加载这个非 AMD 库并公开在 exports 变量中指定的全局命名空间,就好像它是一个 AMD 模块一样”。


    RequireJS's documentation 和其他一些 SO 问题实际上很好地解释了它:12

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 2014-11-08
      • 2012-11-02
      • 2015-09-05
      • 2016-12-24
      相关资源
      最近更新 更多