0

複数のバックエンド サービスが、最終的に 1 つの Web ページに結合されるフロントエンド コンテンツを提供するシステムがあります。

現在、YUI3 ローダーを使用して、YUI およびその他の JavaScript ライブラリ (jQuery、ノックアウトなど) の javascript および css 依存関係管理をサポートしています。

私が疑問に思っているのは、このプロセスがページ上にライブラリの複数のバージョンを持つことに対して堅牢である (YUI3 のローダーまたは他のローダーを使用する) 方法があるかということです。

たとえば、すべての消費コードがグローバルな $ を使用するのではなく $ オブジェクトを引数として取る場合、理論的には、ローダーは $ バージョン 1.1 と $ バージョン 1.2 のコピーをグローバル スコープの外に格納し、これらのオブジェクトを次のように消費コードに渡すことができます。適切な。

4

1 に答える 1

0

私はそれをテストしておらず、微調整が必​​要かもしれませんが、これは私ができると思う方法です。

YUI ローダーを使用すると、YUI 自体の複数のバージョンをロードできます。Yこれが、要求されたモジュールのロードが完了したときに呼び出すコールバックに通常呼び出される引数を提供する理由です。

YUI().use('moduleA', 'moduleB', ... , function (Y) {

複数回呼び出すことができ、それぞれが要求されたモジュールを使用しYUI().use()て独自のバージョンの を提供します。Y

さらに、呼び出しをネストできますuse()

YUI().use('moduleA', 'moduleB', ... , function (Y) {
     // ......
     Y.use('moduleC', function (X) {

2 番目のインスタンスではX、コールバックの引数として使用したので、使用可能なX場所'moduleC'と使用できYない場所を実際に使用できます。他のモジュールは、 と の両方Xで使用できますY。または、単純に 1 つを閉じYUI().use()て、それぞれ独自のモジュールを持つ別のものを開始することもできます ( http://yuilibrary.com/yui/docs/yui/yui-multi.htmlを参照)。

外部モジュールについては、このビデオの約 42 分をご覧ください。Y外部モジュールをロードし、それらをそのモジュールまたはX任意のモジュールに統合する方法を示します。イベントへのコールバックonProgressで、ロードされたモジュールが YUI インスタンスに追加されます。つまりY、 が呼び出されYUI.add()ます。のYコールバックに提供される引数は、 のコールバックでYUI.add()取得する引数と同じですYUI().use()

そのため、外部モジュールを定義して、それぞれ、各バージョンなど、異なるモジュール名を指定し、それぞれがそのバージョンに対応するパスを指すようにする必要があります。各バージョンが共通のルート パスを共有している場合 base、構成属性のgroups構成 ( http://yuilibrary.com/yui/docs/yui/loader.html#example-configを参照) が便利です。

私が考えることができる2つの落とし穴。まず、外部ライブラリがすべてをグローバル変数にロードすると、2 番目のバージョンをロードするときに、最初にロードされたものの残りが残ります。それによって競合が発生する場合は、そのグローバル オブジェクトへの参照を に配置した後で、そのグローバル オブジェクトを削除する必要がある場合がありますY。これは、モジュールのバッチ全体がロードされた後、おそらくonSuccessコールバックではなく、onProgressコールバックで実行する必要があります。そうしないと、後のモジュールの依存関係が消去されるためです。

2 つ目は、リモートのようなもので、説明するには長すぎます。全く起こらないかもしれないので、後回しにしましょう。

于 2013-08-14T06:42:38.180 に答える