一部の環境で条件付きで2番目のモジュールを必要とするAMDモジュールがあると仮定します。
define(["require"]、function(require){
var myObj = {
foo:console.error.bind(console)
};
if(browserEnv)
require(["./ conditional-polyfill"]、function(polyfill){
myObj.foo = console.log.bind(console、polyfill);
});
myObjを返します。//条件付きrequireが満たされる前に戻ります
});
問題は、条件付き要求が完了した後、define()呼び出しを遅らせてreturn / callbackを返すにはどうすればよいですか?
つまり、以下のコードは失敗します:
require(["module-from-above"]、function(logger){
logger.foo( "こんにちは!"); //console.errorが呼び出されます
});
この問題の解決策についての私の考え:
- インライン
./polyfillにすると、すべてが機能します。ただし、これは問題を回避するだけであり、すべての場合に機能するとは限りません。理由でモジュール化してほしい。 - 後で実行される代わりに、 Deferredオブジェクトを返すことができます。これはうまくいくでしょうが、いつも電話をかけるのは本当に醜いです。
myObj./conditional-polyfillloggerDeferred.then(function(logger){ ... }); - このモジュール用のAMDローダープラグインを作成できます。そして、すべての準備ができたらすぐにコールバックを呼び出します。繰り返しますが、これは機能しますが、独自のローダープラグインは私のビルドツールでは機能しません。
私が考えることができるすべての解決策は、優れたコードよりもハックです。しかし、私の問題はそれほど大げさではないと思います。それで、これをどのように処理するのですか?