RequireJS shim导出的是什么?

时间:2015-03-21 20:50:09

标签: javascript backbone.js requirejs

我正在阅读Backbone Fundamentals,目前正在section上介绍如何使用RequireJS构建应用。

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

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

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

require.config({
  shim: {
    'Y': {
      exports: 'globalY'
    }
  }
});
嗯,那解决了什么问题?非AMD库的问题不仅仅是RequireJS无法找出依赖关系吗?

1 个答案:

答案 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问题实际上很好地解释了它:12