0

由于 require.js 是 AMD 模块加载器,同时定义一个新模块,如:

定义([“jquery”],函数($){
   var _private;
   变量 obj = {
       发布函数:...
   }
   返回对象;
});

或者

定义(["jquery","exports"],function($,exports){
 变量 pubFunc;
 出口.pubFunc = pubFunc;

});

Require.js 定义新模块是不是第二个不合适?

4

1 回答 1

2

TL;DR:首先是 RequireJS 的设计方式(使用那个);第二个不是。

更多信息:

看起来您将 RequireJS 与 Node 的 require 混淆了。

在第二个中,您几乎通过向后导出(到应该是依赖项的内容)来反转依赖链的方向。

这实际上大部分时间都有效:

exports.pubFunc = pubFunc;

在此范围内:

  • JavaScript 对象是通过引用传递的,所以属性会被添加到exportsRequireJS 持有的 Object 中;和
  • RequireJS 将在需要时继续分发修改后的exports对象exports

然而,这完全依赖于 RequireJS 的缓存。作为优化,RequireJS 存储模块的导出,而不是每次都加载文件;因此缓存版本exports被重新分发(与您添加的属性一起完成)。

因此,当缓存的对象没有被传递时,这会中断,例如在不同的 RequireJS上下文中

您应该将导入视为不可变的,即使您可以修改它们。

于 2013-04-12T10:34:37.407 回答