Как использовать require({cache:{в слоях dojo?
После прочтения тега dojo-build я обнаружил много проблем, с которыми сталкиваются люди при настройке сборок, поэтому я подумал о создании сборки самостоятельно. Но я не смог найти ссылку на синтаксис, используемый при создании слоев Dojo AMD, а именно:
require({cache:{"custom/MyModule":function () {
define(["dojo/_base/lang"], function (lang) {
Похоже, что кеш - это карта, в которой имя модуля является ключевым, а значение - функцией, тело которой является содержимым моего модуля.
Но я не совсем понимаю нижнюю часть:
}, "*now":function (r) {
r(["dojo/i18n!*preload*custom/nls/all*[\"en\",\"de\",\"ROOT\"]"]);
}}});
Это "* сейчас" также является ключом, но, похоже, оно имеет особую связь. Нужно ли это в моем модуле? Или это необязательно?
define("custom/all", [], 1);
это последняя часть. Как я полагаю, это обязательно сделать, даже если на модуль слоя не будет прямой ссылки нигде?
1 ответ
После некоторого реверс-инжиниринга:
cache
Объект содержит карту модулей, которые определены на месте. Имя модуля - это ключ, значение - функция, которая вызывает define
(так что это содержание модуля).
*now
это специальное ключевое слово, оно абсолютно не требуется, но как только оно присутствует, функция, отображаемая под этим ключом, выполняется с функцией, которую можно использовать для вызова дополнительного require
, например, для загрузки файлов NLS.
Блок
"*now":function (r) {
console.log('*now is called with argument: '+r)
}
печатает:
теперь вызывается с аргументом: function (a1, a2, a3) { return contextRequire(a1, a2, a3, module, result); }
функция contextRequire
определяется в dojo.js
,