Позволяет ли AMD определить модуль, экспорт которого динамический, в зависимости от других модулей?Динамический экспорт в модуль 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? Или как код лучше структурирован?
Если я правильно интерпретирую это, вы используете [Упрощенный сахарозаменитель CommonJS] (http://requirejs.org/docs/whyamd.html#sugar), который полагается на магию, которая анализирует исходный код, обязательно делает упрощенные предположения и несовместим с динамическими зависимостями. Что делать, если вы переписываете свой более простой способ AMD: 'define ([someCondition?" Function-impl1 ":" function-impl2 "], function (functionImpl) {return {f: functionImpl};})' Это предполагает, someCondition' не зависит от зависимостей mymodule; если это зависит, вы можете добавить это как пояснение. –