gpt4 book ai didi

javascript - AMD 模块中的动态导出

转载 作者:行者123 更新时间:2023-11-28 07:31:59 30 4
gpt4 key购买 nike

AMD 是否允许您定义一个模块,其导出是动态的,具体取决于其他模块?

我遇到的问题是,即使正文中有 require 调用,define 也会立即返回。这意味着,如果模块的定义依赖于其他模块,则任何依赖于它的模块都无法确定该模块是否已完全加载,即使依赖关系已满足。

一些代码来解释我的问题:

// 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 中完成吗?或者如何更好地构造这样的代码?

最佳答案

我会在您的导出中返回一个 promise

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 的文件。

关于javascript - AMD 模块中的动态导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032099/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com