由于require.js是AMD模块加载器,因此定义了一个新的模块,如:
define(["jquery"],function($){ var _private; var obj = { pubFunc:... } return obj; });
或
define(["jquery","exports"],function($,exports){ var pubFunc; exports.pubFunc = pubFunc; });
在Require.js定义新模块中,第二个是不合适的吗?
答案 0 :(得分:2)
TL; DR:第一个是如何设计RequireJS(使用那个);第二个不是。
更多信息:
看起来你对RequireJS和Node的要求感到困惑。
在第二种方法中,你几乎通过向后导出(应该是一个依赖项)来逆转依赖链的方向。
这实际上大部分时间都有效:
exports.pubFunc = pubFunc;
就此而言:
exports
对象中;和exports
,RequireJS将继续分发修改后的exports
对象。但是,这完全依赖于RequireJS的缓存。作为优化,RequireJS存储模块的导出,而不是每次加载文件;因此,重新分配了exports
的缓存版本(包含您添加的属性)。
因此,当没有传递缓存的对象时会出现这种情况,例如在不同的RequireJS contexts中。
您应该将导入视为不可变,即使您可以修改它们。