AMD 模块中的动态导出
Dynamic exports in an AMD module
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 中完成吗?或者这样的代码如何更好地结构化?
我会在你的exports
中返回一个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
的文件。
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在混合基本 URL 下动态加载 require.js 模块
- 使用RequireJS从数组动态加载模块
- AMD 模块中的动态导出
- 如何在生产环境中动态加载多个优化的requirejs模块
- Mozilla”;添加“;sdk,简单的pref模块,动态选项(取决于以前选项的选项)
- RequireJS:将插件动态应用于模块id
- 动态加载模块角度
- RequireJS - 动态加载模块
- 将泛型函数动态关联到对象属性时的作用域.(模块模式)
- “错误:命名模块未知”,从动态路径加载反应本机图像
- 具有动态路由和动态依赖性的角度模块化
- 在 Angular 中动态注入依赖模块
- 杜兰达尔多语言应用程序,页面/模块标题作为可观察的,动态更改文档.标题
- 动态安装和加载节点.js模块
- Angular-动态创建一个新模块,并将其注入主应用程序'的依赖关系
- 动态命名的局部变量,用于加载模块
- 动态地将模块添加到我的Angular应用程序中
- RequireJS中的动态require,得到"尚未加载上下文“”的模块名称;错误
- 开发一个带有动态模块集的AngularJS应用