RequireJs を使用して、会社のメイン Web サイトに AMD モジュールをロードしています。また、requireJS を使用して、別のドメインでホストされているモジュールをロードしています。requireJS は、「コンテキスト」フィールドを使用してこれをサポートします。すなわち。別の baseUrl を使用して別のサンドボックス環境を作成します。
当面の問題は、2 つの別個のコンテキストに共通のオブジェクトを共有させたい場合です。例えば。jquery (2 回のロードを避けるため) またはウィジェット間でイベントをトリガーする pubsub 実装。
グローバルなrequireJSとともに定義関数を使用して、コンテキスト間にモジュールを挿入する方法を考え出しました
main.js - http://example.com/src/main.jsでホストされています
require(['jquery'], functin($){
// create sandbox/contexted instance of requireJs
var sandbox = requireJS.config({
context: "myContext",
baseUrl : 'http://otherdomain.com/src'
});
// load module (with internal dependencies) from other domain
sandbox.require(['modules/bootstrap.js'], function(bootstrap){
bootstrap.run();
});
});
bootstrap.js - 例。http://widgets.com/src/modules/bootstrap.jsでホストされています
define(function(){
// define jquery into sandboxed environemnt
requireJs('jquery', function($) {
define('jquery', function(){
return window.jQuery;
});
});
// obtain sandboxed instance from parent
var sandbox = requireJs.config({
context: "myContext"
});
sandbox(['jquery'], function($){
console.log($);
});
});
問題は、jquery(または関数を返す他のモジュール)を定義すると、「requreJS」の方法で(グローバルを使用しないで)、常にエラーがスローされることです。
// define jquery into sandboxed environemnt
requireJs('jquery', function($) {
define('jquery', $);
});
これはバグですか、それとも機能ですか?