Я использую RequireJs для загрузки модулей AMD на основной веб-сайт моей компании. Мы также используем requireJS для загрузки модулей, размещенных на отдельных доменах. requireJS поддерживает это с использованием поля «context»; то есть. создайте отдельную изолированную среду с отдельным базовымUrl.Многоконтекстные требования и наследование зависимостей между контекстами
Проблема заключается в том, когда мы хотим, чтобы два отдельных контекста имели общий объект; например. jquery (чтобы не загружать его дважды) или реализация 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($);
});
});
Проблемы в том, что если Im определяющий JQuery (или любой другой модуль, который возвращает функцию), TjE «requreJS» -way (не используя глобал), он всегда будет выдавать ошибку
// define jquery into sandboxed environemnt
requireJs('jquery', function($) {
define('jquery', $);
});
Это ошибка или функция?