requirejs: могу ли я потребовать глобальную переменную среды выполнения?

Я использую requirejs в несколько особой среде JS, где приложение предоставляет глобальный синглтон (я не могу изменить этот факт, это не работает в типичной среде браузера). Я пишу своего рода JS SDK для этого приложения и хочу предоставить различные модули, которые используют этот файл global.

Могу ли я каким-то образом обернуть этот глобальный модуль в модуль, чтобы потребовать его от моих модулей? Что-то типа

define([the_global_application], function(app)

Спасибо за ваши мысли по этому поводу.


person Christof    schedule 26.03.2013    source источник


Ответы (1)


Да, вам просто нужно определить это.

// mysingletonapp.js
// define the module for our global var
define(['list', 'any', 'dependency', 'here'], function (l, a, d, h) {
  return yourGlobalVariable;
});

(Я не думаю, что у вас там будут зависимости, так как вы просто обертываете глобальный var)

Вы можете использовать этот модуль как обычно:

require(['mysingletonapp'], function (app) {
  // do something cool
});

Если вы хотите пропустить все это, вы можете использовать shim свойство RequireJS. Вам просто нужно добавить это в файл параметров:

...
shim: {
        'globalApplication': {
            deps: ['underscore', 'jquery'], // again, you should not need them
            exports: 'yourGlobalVar'
        }
}
...

shims оборачивают библиотеки, которые не поддерживают AMD, поэтому, чтобы этот параметр работал, вам понадобится js для globalApplication. Это не ваш случай.

person Alessandro Vendruscolo    schedule 26.03.2013
comment
Спасибо Алессандро! Довольно просто, я думаю, но я не думал об этом. Однако мне пришлось создать фиктивный файл модуля - если вы используете конфигурацию прокладки для этого, requirejs будет искать файл globalApplication.js в вашем baseUrl, если я не сделал что-то не так. - person Christof; 26.03.2013