Как использовать 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,

Другие вопросы по тегам