RequireJS - модули AMD

Модуль в RequireJS является объектом с заданной областью и недоступен в глобальном пространстве имен. Следовательно, глобальное пространство имен не будет загрязнено. Синтаксис RequireJS позволяет быстрее загружать модули, не беспокоясь о отслеживании порядка зависимостей. Вы можете загрузить несколько версий одного и того же модуля на одну страницу.

Определение модулей

Модуль определяется с помощью define()функция; та же функция используется и для загрузки модуля.

Простые пары имя / значение

Если модуль представляет собой просто набор пар имени и значения, вы можете использовать следующий синтаксис:

define({
   state: "karnataka",
   city: "bangalore"
});

Определение функций

Модуль также может использовать функцию для фреймворков, не имея зависимостей. Это можно сделать, используя следующий синтаксис -

define(function () {
   
   //Do setup work here
   return {
      state: "karnataka",
      city: "bangalore"
   }
});

Определение функций с зависимостями

Если у модуля есть зависимости, размещение первого аргумента (массив имен зависимостей), второго аргумента (определяющая функция) и возвращаемого объекта, который определяет модуль, показано в следующем синтаксисе:

define(["./mnc", "./startup"], 
   function(mnc, startup) {
        
      return {
         state: "karnataka",
         city: "bangalore",
      
         addCompany: function() {
            mnc.decrement(this);
            startup.add(this);
         }
      
      }
   }
);

Определение модуля как функции

Модуль не обязательно должен возвращать только объекты, любое допустимое значение из функции также может быть возвращено. Следующий синтаксис используется для определения модуля как функции -

define(["./mnc", "./startup"],
   function(mnc, startup) {
       
      return function(title) {
         return title ? (window.title = title) :
         startup.storeName + ' ' + mnc.name;
      }
      
   }
);

Определение модуля с именем

В некоторых случаях вам может потребоваться включить имя модуля в качестве первого аргумента для define(). Это можно сделать, используя следующий синтаксис -

define("js2/title",
   ["js1/mnc", "js1/startup"],
   
   function(mnc, startup) {
      //Define js2/title object in here.
   }
   
);

Загрузка модуля