1

jQueryやBackboneなどのライブラリのロードからBackboneビュー、モデルなどの定義まで、requirejsを使用する既存のサイトがあります。これをnode.jsを使用してサーバー側でレンダリングしようとしているため、完全に別のものが必要です各リクエストのコンテキスト スタック。

Requirejs のマルチバージョン サポートは、私が必要としているものをほとんど備えています。これにより、将来のロード用に特別なコンテキストを宣言できます。var context1 = require.config({context: "abc123"}); context1(['item'], function(item){}); 'item' は、既にロードされている場合でも個別にロードされます。残念ながら、必要なアイテムには、そのコンテキスト スタックに分離されたアイテムを要求および定義する機能も必要です。

Requirejs には、内部の takeGlobalQueue 関数で設定されたこの機能がほとんど含まれています。残念ながら、この関数は、最新の呼び出し以降に定義されたすべてのアイテムを取得することを想定しているため、別のコンテキスト スタックで定義されたアイテムを取得する可能性があります。

私が必要としているのは、requirejs を使用して、define/require の真に別個のインスタンスを提供し、将来の呼び出しでその分離を維持する方法です。

サイト全体をrequirejsを使用しないように書き直したり、すべてのrequirejs呼び出しにプラグインを必要としたりしたくありません。このためにr.jsソースをハッキングする必要がありますか? これはAMDの仕様に反するものですか?

更新 1: nodejs で、domino/jsdom を使用してウィンドウ コンテキストを作成するとします。次に、Backbone.View.make がそのウィンドウに要素を作成するように、jQuery/zepto と Backbone のコピーをそのウィンドウにアタッチします。次に、実際のアプリケーション スタックをロードして、backone のそのコピーを継承し、すべてがブラウザー内にあるかのように「正常に機能する」ようにします。jquery/backbone ソースをハッキングする必要はありません。しかし、別の同時リクエスト用に別のウィンドウを指すバックボーンの別のコピーが必要です。つまり、ビュー/モデルなどの別のコンテキスト スタックが必要です。

4

1 に答える 1

1

この質問には十分なコンテキストがありません。セグメント化された読み込みはどのように行われるのですか?

ノードエクスプレスWebサーバーでrequirejs、jquery、およびd3を使用する方法

確かではありませんが、新しい vm コンテキストでコードを実行することも解決策の一部である可能性があります。

http://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename

于 2012-12-17T03:23:00.097 に答える