4

AMDモジュールシステムでモジュールの依存関係を指定するための条件を使用することを考えています。たとえば、libraryA をブラウザーにロードし、libraryB をサーバーにロードします。

これは次のようになります。

define([window?"libraryA":"libraryB"],function(library){
    //do some stuff
});

これにより、2 つのモジュールの抽象化レイヤーを構築できます。しかし、これは本当に良い考えですか?これを行うことに欠点はありますか?

4

1 に答える 1

4

このアプローチは、ビルド ツールに問題を引き起こす可能性があります。

アップデート:

さらに調査した結果、メインの JS ファイルの構成設定がオプティマイザーによってデフォルトで読み取られないことがわかりました。したがって、よりクリーンなソリューションは、クライアントとサーバーに異なるマップ構成を使用することです。

オリジナル:

より安全なアプローチは、環境に適応するモジュールを定義することです。これにより、すべての条件付きコードをモジュール定義内に保持し、すべての依存関係リストを最も信頼できる形式のままにします。

// dependent module
define(["libraryAB"], function (library) {
    //do some stuff
});


// libraryAB.js dependency module
define([], function () {

    return window ?
        defineLibraryA() :
        defineLibraryB();

});

または、この方法で定義することにより、libraryAとコードを分離しておくこともできます。libraryBlibraryAB

// libraryAB.js dependency module
define(["libraryA", "libraryB"], function (libraryA, libraryB) {

    return window ? libraryA : libraryB;

});

//define libraryA.js and libraryB.js as usual

libraryAサーバーまたはクライアントでの実行を避けたい場合はlibraryB、これらのモジュールに関数を返させ、必要に応じて結果を記憶させることができます。

教訓は、すべての非標準コードをモジュール定義内に保持し、依存関係リストを適切で予測可能な状態に保つことが最も安全であるということです。

于 2012-11-08T12:29:05.577 に答える