2013-02-15 9 views
6

独自の依存関係を持つ独立したスタンドアロンSPAで構成される大きな単一ページアプリケーションをパーティション分割する方法として、requirejsコンテキストの使用を開始しました。複数のrequirejsコンテキスト間で共通の依存関係を処理する方法はありますか?

ジェームズ・バークは、私は今、共有されていない複数のコンテキストと、共通の依存関係についてのgithubの上でこのコメントに遭遇しています問題、私は重複した要求を発生させることなく異なるrequirejsコンテキスト間の共通の依存関係を共有するにはどうすればよいhttps://github.com/aurajs/aura/pull/170#issuecomment-10973485

を説明します同じファイルですか?

+0

を...私はちょっと、私は、各アプリケーションを初期化する際に、共通のモジュールへの参照を注入することによってそれを解決し、しかし、別のコンテキストから他のコンテキストへのアクセスが可能であれば素晴らしいことでしょう – chchrist

+1

コンテキストを管理するためにrequire.jsプラグインを作成することで問題を解決できる場合、プラグインはグローバルコンテキストから依存関係を取り除いて複数を回避できるかどうかを判断できます同じ依存関係の要求オープンソーシングのソリューションがないため、これまでのところ、これに対する回答はありません。 http://requirejs.org/docs/plugins.html –

+1

ブラウザを使用してください:https://github.com/substack/node-browserify/ – avetisk

答えて

0

大規模なマルチモジュールjsアプリを梱包する場合は、browserifyを参照してください。

1

説明したのと同じ問題が発生しました。ネストされたコンテキスト間の共通の依存関係を共有するためのプラグインを作成しました。

Requirejsは、すべてのコンテキストを含むマップを持っており、それが依存関係を定義しています:

requirejs.s.contexts

{ 
    _: { 
    defined: { 
     commondep: {}, 
     main: undefined 
    } 
    } 
    plugin: { 
    defined: { 
     commondep: {}, 
     plugin: {} 
    } 
    } 
} 

_文脈主なコンテキストがあります。このコンテキストを使用して、すべてのグローバルモジュール定義を決定することができます。共有依存関係は、プラグインスクリプトをあらかじめロードし、依存関係をグローバル依存関係と比較することで判断できます。我々はモジュールのグローバルインスタンスを取得するために、非非同期な方法で必要と呼んこのスニペットで

function injectDependency(dependencyName, contextName) { 
    var ctx = getContext(contextName); 
    var dependencyInstance = require(dependencyName); 

    ctx.defQueue.push([ dependencyName, [], function() { return dependencyInstance; }]); 
} 

function getContext(contextName) { 
    return requirejs.s.contexts[contextName]; 
} 

:共有モジュールは、サンドボックスのコンテキストに注入することができます。モジュールは定義キューにプッシュすることでサンドボックスに挿入されます。

プラグインローダーのこのソリューションの実装は、https://github.com/igsp/requireplugからダウンロードできます。私は私のブログにこのソリューションの仕組みについてのより詳細な説明掲載

:私は同じ問題を抱えている https://intergalacticspacepocket.wordpress.com/2014/08/07/nesting-requirejs-contexts-with-shared-dependencies/

関連する問題