2013-04-12 7 views
0

Поскольку require.js является модуль загрузчика AMD, при определении нового модуля, как:Уместно ли использовать экспорт при определении нового модуля в require.js?

 
define(["jquery"],function($){ 
    var _private; 
    var obj = { 
     pubFunc:... 
    } 
    return obj; 
}); 

или

 
define(["jquery","exports"],function($,exports){ 
var pubFunc; 
exports.pubFunc = pubFunc; 

}); 

ли это второй неуместно в определении нового модуля Require.js в?

+0

Вы спрашиваете, есть ли вторая форма _possible_? Или если это рекомендуется? –

+0

@ PaulPhillips, да – Lanston

ответ

2

TL; Первый - как RequireJS был разработан для работы (используйте его); второй - нет.

Подробнее:

Похоже, вы путаете RequireJS с узла требуется.

Во втором случае вы почти меняете направление цепи зависимостей, экспортируя назад (в зависимости от того, какая зависимость).

Это действительно будет работать большую часть времени:

exports.pubFunc = pubFunc; 

поскольку что:

  • JavaScript объекты передаются по ссылке, поэтому свойство будет добавлено к exports объекта, проведенного RequireJS; и
  • RequireJS будет продолжать распространять модифицированный объект exports всякий раз, когда требуется exports.

Однако это полностью зависит от кэширования RequireJS. Как оптимизация, RequireJS хранит экспорт модулей, а не каждый раз загружает файл; следовательно, кэшированная версия exports перераспределяется (в комплекте с добавленным вами свойством).

Следовательно, это сломается, когда кешированный объект не будет передан, например, в разных RequireJS contexts.

Вы должны рассматривать импорт как неизменный, даже если вы можете их изменить.

Смежные вопросы