Помощью RequireJS определить депс по умолчанию
Обычно модуль requirejs выглядит следующим образом:
define('ModuleName', ['jquery', 'underscore', 'backbone'], function($, _, Backbone){
});
Поскольку каждый файл в моей установке требует подчеркивания и магистрали, я хотел бы иметь их автоматически доступными в модуле без необходимости определять их как зависимости.
Итак, что-то вроде:
define('ModuleName', ['jquery'], function($){
$("div.someClass").addClass('hide'); // works
var Model = Backbone.Model.extend(); // works too
});
Возможно ли это?
Если да, то как или какое ключевое слово я должен искать?
1 ответ:
Модули, которые вас интересуют, должны быть прикреплены к внешней области видимости. По умолчанию магистраль, подчеркивание, jQuery и т. д. остаются присоединенными к глобальной области, если вы не вызовете noConflict () на них (не все модули обеспечивают эту тонкость). Подключение модулей к глобальной области действия не является отличным решением, но позволит выполнить то, что вы просите, и в любом случае это поведение по умолчанию. Лучшей альтернативой было бы определить внешний модуль (или просто вызов require ()), который содержит те зависимости в дополнение к вашим именованным субмодулям. В противном случае, большая часть причин для использования RequireJS теряется.
Отредактировано, например:
require(['underscore', 'backbone'], function (_, Backbone) { define('ModuleName', ['jquery'], function($){ $("div.someClass").addClass('hide'); // works var Model = Backbone.Model.extend(); // works too }); //Other modules here, otherwise this is pointless too } );
Даже это полезно только в том случае, если вы определяете несколько именованных модулей в одном файле. Лучшим решениемс моей точки зрения, к сожалению, является явный импорт ваших модулей и разрешение неявного именования модулей, но приведенный выше пример ближе всего к тому, что вы просите. Что касается неявных имен модулей, то из RequireJS api docs :
Вы можете явно назвать модули сами, но это делает модули менее портативный - если вы переместите файл в другой каталог, вы будете нужно сменить имя.