AMD是否允许您定义导出为动态的模块,具体取决于其他模块?
我遇到的问题是define
会立即返回,即使正文中有require
次来电也是如此。这意味着,如果模块的定义依赖于其他模块,则任何依赖于它的模块都无法确定模块是否已满载,即使已满足相关性。
解释我的问题的一些代码:
// A module that exports one function 'f'. The implementation of this f comes
// from another module, dynamically selected based on a condition.
define("mymodule", function (require, exports) {
var functionImplModule = someCondition ? "function-impl1" : "function-impl2";
require([functionImplModule], function (functionImpl) {
exports.f = functionImpl;
});
});
// Entry point. I want to use module.f in some code.
require(["mymodule"], function (mymodule) {
// Can't use mymodule.f here yet, because the require() of 'mymodule' isn't done yet
console.log(mymodule.f);
});
这可以在AMD完成吗?或者这样的代码如何更好地构建?
答案 0 :(得分:0)
我会在promise
中返回exports
。
define("mymodule", function (require, exports) {
var deferred = ..., functionImplModule = someCondition ? "function-impl1" : "function-impl2";
require([functionImplModule], function (functionImpl) {
deferred.resolve(functionImpl);
});
exports.f = deferred.promise;
});
// Entry point. I want to use module.f in some code.
require(["mymodule"], function (mymodule) {
mymodule.f.then(function(impl) ... );
});
请注意您似乎也懒惰配置模块。这对捆绑和缩小不利。也许您可以使用您的配置更改用于mymodule
的文件。