由于 require.js 是 AMD 模块加载器,同时定义一个新模块,如:
定义([“jquery”],函数($){ var _private; 变量 obj = { 发布函数:... } 返回对象; });
或者
定义(["jquery","exports"],function($,exports){ 变量 pubFunc; 出口.pubFunc = pubFunc; });
Require.js 定义新模块是不是第二个不合适?
由于 require.js 是 AMD 模块加载器,同时定义一个新模块,如:
定义([“jquery”],函数($){ var _private; 变量 obj = { 发布函数:... } 返回对象; });
或者
定义(["jquery","exports"],function($,exports){ 变量 pubFunc; 出口.pubFunc = pubFunc; });
Require.js 定义新模块是不是第二个不合适?
TL;DR:首先是 RequireJS 的设计方式(使用那个);第二个不是。
更多信息:
看起来您将 RequireJS 与 Node 的 require 混淆了。
在第二个中,您几乎通过向后导出(到应该是依赖项的内容)来反转依赖链的方向。
这实际上大部分时间都有效:
exports.pubFunc = pubFunc;
在此范围内:
exports
RequireJS 持有的 Object 中;和exports
对象exports
。然而,这完全依赖于 RequireJS 的缓存。作为优化,RequireJS 存储模块的导出,而不是每次都加载文件;因此缓存版本exports
被重新分发(与您添加的属性一起完成)。
因此,当缓存的对象没有被传递时,这会中断,例如在不同的 RequireJS上下文中。
您应该将导入视为不可变的,即使您可以修改它们。